无需绑定即可将DataTable Row添加到DataGridView

时间:2012-12-10 22:03:35

标签: c# winforms datagridview datatable

我有一个预定义的DataGridView,我需要在没有数据绑定的情况下从DataTable添加行。我试图以编程方式使用DataGridView.Rows.Add()方法,但我不知道DataTable的列名。 DataTable中的列与DataGridView的顺序相同,但如何在不知道列名的情况下将它们添加到DataGridView中?

3 个答案:

答案 0 :(得分:12)

假设您的DataGridView存在但没有列。你可以这样做:

foreach (DataColumn dc in yourDataTable.Columns) {

     yourDataGridView.Columns.Add(new DataGridViewTextBoxColumn());

}

然后添加行数据:

foreach(DataRow dr in yourDataTable.Rows) {

     yourDataGridView.Rows.Add(dr.ItemArray);

}

现在,如果默认文本框列不够,则可能必须创建具有不同单元格模板的列。

答案 1 :(得分:0)

如果你的DataGridView没有行和列,那么只需

yourDataGridView.DataSource = yourDataTable

将完成所有工作。

如果您的DataGridView已经绑定到某个数据源(如果您使用DataTable,那么我假设DataSource是DataTable),

然后你需要编辑你的数据表 - >从旧的DataTable添加旧行(如果旧的DataTable不再可访问,则从DataGridView添加)

foreach(DataRow dr in oldDataTable.Rows)
{
    yourDataTable.Rows.Add(dr);
}
yourDataGridView.DataSource = yourDataTable;

或编辑oldDataTable - >从yourDataTable添加新行,例如:

DataTable dtOld = (DataTable)yourDataGridView.DataSource;
foreach(DataRow yourdr in yourDataTable.Rows)
{
    dtOld.Rows.Add(yourdr);
}
yourDataGridView.DataSource = dtOld;

答案 2 :(得分:0)

似乎你想从DataTable获取列名并从DataTable行向DataGridView添加行

            DataTable myDataTable = new DataTable();
            //adding Columns
            myDataTable.Columns.Add("colInt", typeof(int));
            myDataTable.Columns.Add("colDate", typeof(DateTime));
            myDataTable.Columns.Add("colString", typeof(string));

            //adding Rows
            myDataTable.Rows.Add(1, DateTime.Now, "Hello World");

            //to get columns
            foreach (DataColumn col in myDataTable.Columns)
            {
                var c = new DataGridViewTextBoxColumn() { HeaderText = col.ColumnName }; //Let say that the default column template of DataGridView is DataGridViewTextBoxColumn
                dataGridView1.Columns.Add(c);
            }

            //to get rows
            foreach (DataRow row in myDataTable.Rows)
            {
                dataGridView1.Rows.Add(row[0], row[1], row[2]);
            }

无论如何都有捷径 dataGridView1.DataSource = myDataTable;