日期:2014-05-18  浏览次数:21380 次

C# WinForm listview 如何将相同的行合并
C# WinForm listview 如何将相同的行合并,数据是解析出来的
道具编号 道具名称 道具数量 角色名称
289 新手衣服 1 sdfsdf
883 月之心 1 sdfsdf
883 月之心 1 sdfsdf




不是从数据库里查询出来的,是解析出来的
我的目的是 合并listview 相同的行
道具编号 道具名称 道具数量 角色名称
289 新手衣服 1 sdfsdf
883 月之心 2 sdfsdf

在线等高手,不甚感激

------解决方案--------------------
var value=(from v in listview select v.道具编号).Distinct().ToList();

上面是linq筛选,这样得到的list就是去到重复的啦,试试吧
------解决方案--------------------
可以用泛型分组,然后重新构建DataTable
IEnumerable<IGrouping<string, DataRow>> result = dt.Rows.Cast<DataRow>().GroupBy<DataRow, string>(d => d[8].ToString());
foreach (IGrouping<string, DataRow> ig in result)
重复的行手动合并
------解决方案--------------------
C# code

string[] columns = new string[DataTableSource.Columns.Count];

            for (int index = 0; index < DataTableSource.Columns.Count; index++)
            {
                columns[index] = DataTableSource.Columns[index].ColumnName;
            }
            //得到不重复的数据行
            DataTable dt = DataTableSource.DefaultView.ToTable(true, columns); 

            foreach (DataRow dr in dt.Rows)
            {
                DataRow[] drs = DataTableSource.Select(string.Format("编号='{0}'", dr["编号"].ToString()));
                if (drs.Length > 0)
                {
                    int num = 0;
                    foreach (DataRow row in drs)
                    {
                        num += int.Parse(row["数量"].ToString());
                    }
                    dr["数量"] = num.ToString();
                }            
            }

            dataGridView1.DataSource = dt;