行转列,报表统计时,同一Id不同状态下的数据

//把数据放到Dictionary中
            DataTable NewTable = new DataTable();
            NewTable.Columns.Add("name", typeof(string));
            NewTable.Columns.Add("company", typeof(string));
            NewTable.Columns.Add("fgongkai", typeof(string));
            NewTable.Columns.Add("finvite", typeof(string));
            NewTable.Columns.Add("fmeeting", typeof(string));
            NewTable.Columns.Add("ftotal", typeof(string));
            NewTable.Columns.Add("sgongkai", typeof(string));
            NewTable.Columns.Add("sinvite", typeof(string));
            NewTable.Columns.Add("smeeting", typeof(string));
            NewTable.Columns.Add("stotal", typeof(string));
            NewTable.Columns.Add("total", typeof(string));
            Dictionary<string, DataRow> DataList = new Dictionary<string, DataRow>();
            DataRow Newdr;
            foreach (DataRow dr in dt.Rows)
            {
                if (!DataList.ContainsKey(dr["ExpertId"].ToString().Trim()))
                {
                    Newdr = NewTable.NewRow();
                    Newdr["name"] = dr["ExpertName"];
                    Newdr["company"] = dr["CompanyName"];
                    if (dr["InMeeting"].ToString().Trim() == "1")
                    {
                        Newdr["fgongkai"] = DataConvert.ToInt(dr["gongkai"]);
                        Newdr["finvite"] = DataConvert.ToInt(dr["invite"]);
                        Newdr["fmeeting"] = DataConvert.ToInt(dr["meeting"]);
                        Newdr["ftotal"] = DataConvert.ToInt(dr["gongkai"]) + DataConvert.ToInt(dr["invite"]) + DataConvert.ToInt(dr["meeting"]);
                        Newdr["total"] = Newdr["ftotal"];
                    }
                    else
                    {
                        Newdr["sgongkai"] = DataConvert.ToInt(dr["gongkai"]);
                        Newdr["sinvite"] = DataConvert.ToInt(dr["invite"]);
                        Newdr["smeeting"] = DataConvert.ToInt(dr["meeting"]);
                        Newdr["stotal"] = DataConvert.ToInt(dr["gongkai"]) + DataConvert.ToInt(dr["invite"]) + DataConvert.ToInt(dr["meeting"]);
                        Newdr["total"] = Newdr["stotal"];
                    }
                    DataList.Add(dr["ExpertId"].ToString(), Newdr);
                }
                else
                {
                    Newdr = DataList[dr["ExpertId"].ToString()];
                    if (dr["InMeeting"].ToString().Trim() == "1")
                    {
                        DataList[dr["ExpertId"].ToString()]["fgongkai"] = DataConvert.ToInt(dr["gongkai"]);
                        DataList[dr["ExpertId"].ToString()]["finvite"] = DataConvert.ToInt(dr["invite"]);
                        DataList[dr["ExpertId"].ToString()]["fmeeting"] = DataConvert.ToInt(dr["meeting"]);
                        DataList[dr["ExpertId"].ToString()]["ftotal"] = DataConvert.ToInt(dr["gongkai"]) + DataConvert.ToInt(dr["invite"]) + DataConvert.ToInt(dr["meeting"]);
                    }
                    else
                    {
                        DataList[dr["ExpertId"].ToString()]["sgongkai"] = DataConvert.ToInt(DataList[dr["ExpertId"].ToString()]["sgongkai"]) + DataConvert.ToInt(dr["gongkai"]);
                        DataList[dr["ExpertId"].ToString()]["sinvite"] = DataConvert.ToInt(DataList[dr["ExpertId"].ToString()]["sinvite"]) + DataConvert.ToInt(dr["invite"]);
                        DataList[dr["ExpertId"].ToString()]["smeeting"] = DataConvert.ToInt(DataList[dr["ExpertId"].ToString()]["smeeting"]) + DataConvert.ToInt(dr["meeting"]);
                        DataList[dr["ExpertId"].ToString()]["stotal"] = DataConvert.ToInt(DataList[dr["ExpertId"].ToString()]["stotal"]) + DataConvert.ToInt(dr["gongkai"]) + DataConvert.ToInt(dr["invite"]) + DataConvert.ToInt(dr["meeting"]);
                    }
                    DataList[dr["ExpertId"].ToString()]["total"] = DataConvert.ToInt(DataList[dr["ExpertId"].ToString()]["ftotal"]) + DataConvert.ToInt(DataList[dr["ExpertId"].ToString()]["stotal"]);
                }
            }

            DataTable NewTable2 = new DataTable();
            NewTable2 = NewTable.Clone();//复制NewTable表结构
            foreach (DataRow dr in DataList.Values)//将DataList中的数据放到NewTable2中
            {
                NewTable2.Rows.Add(dr.ItemArray);
            }

            DataView dv = NewTable2.DefaultView;
            dv.Sort = " total desc";//根据total排序
            DataTable dt1 = dv.ToTable();

            int row = 1;
            foreach (DataRow dr in dt1.Rows)
            {
                html.Append(@" 
                            <tr>
                                <td class=""gray"" align=""center"" valign=""middle"">" + row + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + dr["name"] + @"</td>
                                <td align=""left"" valign=""middle"" style=""background: #D6F1FC"">" + dr["company"] + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["fgongkai"]) + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["finvite"]) + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["fmeeting"]) + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["ftotal"]) + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["sgongkai"]) + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["sinvite"]) + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["smeeting"]) + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["stotal"]) + @"</td>
                                <td align=""center"" valign=""middle"" style=""background: #D6F1FC"">" + DataConvert.ToInt(dr["total"]) + @"</td>
                            </tr>");
                row++;
            }
原文地址:https://www.cnblogs.com/yueyuepeng/p/5614364.html