首页 新闻 会员 周边

DataGridView相同列进行合并

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-28 11:16

将一个Excel文件读取到DataGridView里面,然后对这个DataGridView进行处理,这个Excel文件一共有3列数据,

如果第一列和第二列的数据完全一样的话,就把对应的那几行数据的第三列进行合并,具体的看图:

无 影的主页 无 影 | 初学一级 | 园豆:59
提问于:2012-09-20 15:24
< >
分享
最佳答案
0

你先把数据放到集合或DataTable中,直接在集合或DataTable中把数据合并了再绑定到DataGridView。

收获园豆:15
Launcher | 高人七级 |园豆:45045 | 2012-09-20 15:36

Lanucher,

你能不能告诉我一个思路,就是说怎么样去进行数据合并?感谢。

无 影 | 园豆:59 (初学一级) | 2012-09-20 15:54

@无 影: 你的没合并前的 dgv.DataSource 是 DataTable吗?

Launcher | 园豆:45045 (高人七级) | 2012-09-20 16:29

@无 影: 合并的思路很简单,参照你原来的代码,只是每次 DataRow dr = dt.NewRow(); 之前,先做一次查找:DataRow[] rows = dt.Select(string.Format("COL1 == {0} AND COL2 == {1}",dgv.Rows[i].Cells[0].Value.ToString().Trim(),dgv.Rows[i].Cells[1].Value.ToString().Trim()));

如果找到了,则直接修改: rows["COL3"] +=  dgv.Rows[i].Cells[2].Value.ToString().Trim()

Launcher | 园豆:45045 (高人七级) | 2012-09-20 16:32

@Launcher: 

 

貌似rows["COL3"] += dgv.Rows[i].Cells[2].Value.ToString().Trim();这样的语法是错误的啊。

无 影 | 园豆:59 (初学一级) | 2012-09-21 09:59

@无 影: 我就表示下意思,只是说明把相同行的第三列数据合并在一起。

rows["COL3"] = rows["COL3"].ToString() + ","+dgv.Rows[i].Cells[2].Value.ToString().Trim()

Launcher | 园豆:45045 (高人七级) | 2012-09-21 10:11

@Launcher: 

我明白,只是修改的时候是修改DataTable里面的那一列的值吗?

无 影 | 园豆:59 (初学一级) | 2012-09-21 13:41

@无 影: 对。

Launcher | 园豆:45045 (高人七级) | 2012-09-21 13:42
其他回答(1)
0

可以在绑定数据前处理

收获园豆:5
田林九村 | 园豆:2367 (老鸟四级) | 2012-09-20 15:35

我就是想知道怎么处理,我试过用了循环进行比较,但是发现得不到我要的效果:

public void SetSource()
        {
            dt.Columns.Add("AA");
            dt.Columns.Add("BB");
            string a = "";
            for (int i = 0; i < dgv.Rows.Count; i++)
            {
                DataRow dr = dt.NewRow();
              
                if (dgv.Rows[i].Cells[0].Value.ToString().Trim() == dgv.Rows[i + 1].Cells[0].Value.ToString().Trim())
                {
                    dr["AA"] = dgv.Rows[i + 1].Cells[0].Value.ToString();
                    a = a + "," + dgv.Rows[i].Cells[1].Value.ToString() + "," + dgv.Rows[i + 1].Cells[1].Value.ToString();

                    dr["BB"] = a;

                    dt.Rows.Add(dr);
                }
                else
                {
                    dr["AA"] = dgv.Rows[i].Cells[0].Value.ToString();
                    dr["CC"] = dgv.Rows[i].Cells[1].Value.ToString();
                    dt.Rows.Add(dr);
                    
                }
            }

            this.dgv2.DataSource = dt;
        }
支持(0) 反对(0) 无 影 | 园豆:59 (初学一级) | 2012-09-20 15:39

@无 影: if (dgv.Rows[i].Cells[0].Value.ToString().Trim() == dgv.Rows[i].Cells[1].Value.ToString().Trim())   应该这样写吧

支持(0) 反对(0) 田林九村 | 园豆:2367 (老鸟四级) | 2012-09-20 15:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册