C# 怎么把查询到的数据从datatable用foreach循环加载到datagridview

datagridview已经设置过表头
怎么把查询到的数据从datatable用foreach循环加载到datagridview

通过取得datatable的列集合来为datagridview添加列,通过取得datatable的行集合来为datagridview添加行,代码如下:

//dataGridView1.DataSource = table;//通常只写这一句就可以了,但根据你的要求,用下面的循环也可以实现相同功能。
dataGridView1.Columns.Clear();//清空列
foreach (DataColumn column in table.Columns)
{
    //为datagridview添加列,第一个参数是列名,第二个参数是列标题
    dataGridView1.Columns.Add(column.ColumnName, column.ColumnName);
}
dataGridView1.Rows.Clear();//清空行
foreach (DataRow line in table.Rows)
{
    //因为列已经一致了,所以直接将datatable的行转成数组就可以添加到datagridview中了
    dataGridView1.Rows.Add(line.ItemArray);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
            foreach (DataRow row in dt.Rows)
            {
                foreach (DataColumn col in dt.Columns)
                {
                    int i = dataGridView1.Rows.Add();
                    string cellname = "";
                    switch (col.ColumnName)
                    {
                        case "列名1":
                            {
                                cellname = "Datagridview列名1";
                                break;
                            }

                        case "列名2":
                            {
                                cellname = "Datagridview列名2";
                                break;
                            }
                        default:
                            {
                                continue;

                            }
                    }
                    dataGridView1.Rows[i].Cells[cellname].Value = row[col];
                }
            }

追问

中间那switch有没有其他简化点的写法,因为列明有点子多~~~

追答

如果你的列名和表的列名是完全一样的,就不需要switch,直接把cellname改成col.ColumnName。但是如果是一样的,就像他们说的用绑定还快点。

追问

一开始就在datagridview里设置过表头了,用绑定的话不就原来设的表头下面没数据,会跑出数据库字段名的表头来了

追答

那你最开始干嘛要设置呢?
dataGridView1.DataSource = dt;
这样就是自动生成列的。

追问

是必须要有表头,如果不点查询的话表里是什么数据也没有的

追答

哦,那就用我上面说的,直接把cellname改成col.ColumnName。另外,还是可以绑定的,如果没有记录,你也可以先构造一个空表啊,或者dt.Clone(),很多方法可以实现的。

本回答被提问者采纳
第2个回答  2013-07-31
直接DataGridView.DataSource = DataTable 不可以吗?
第3个回答  2013-07-31
你既然用了控件干嘛不用.DataSource=""绑定?
别忘了**.DataBind()追问

一开始就已经设置过表头了,查询出数据绑到datagridview以后数据和字段就都显示到预先设置的表头后面了

追答

你要么清除之前的表头设置,绑定后在dataGridView属性里设置,如果你想灵活一些,建议你使用Repeater控件,还是那样绑定,但你可以自定义重复项
......

..

...

.....

追问

这是winform程序~~~

追答

把你定义的列清除了,dataGridView1.DataSource=DataTable,不用写dataGridView1.DataBind();
然后再控件属性上定义列设置,可以改列头文字,宽度,是否冻结!不开VS快一年了,你自己找找看属性,肯定有!

追问

不查询的话gridview里什么数据都木有~~所以不能没有表头

第4个回答  2013-07-31
DataGridView.DataSource = DataTable
相似回答