我可以在不使用DataSource属性的情况下在DataGridView中添加DataTable吗

本文关键字:DataGridView 添加 DataTable 情况下 属性 DataSource 我可以 | 更新日期: 2023-09-27 18:28:33

这是一个将DataTable复制到DataGridView中的方法,该方法不起作用,该方法只能在DataGridView添加列和空行。有人能建议我在不使用DataGridView的DataSource属性的情况下解决这个问题吗?

    public void CopyDataTableInDataGridView(DataTable table, DataGridView gdv)
    {
        if (gdv.Rows.Count > 0)
            gdv.Rows.Clear();
        if (table != null && table.Rows.Count > 0)
        {
            foreach (DataColumn _colm in table.Columns)
            {
                DataGridViewColumn _col;
                if (_colm.GetType() == typeof(bool))
                    _col = new DataGridViewCheckBoxColumn();
                else
                    _col = new DataGridViewTextBoxColumn();
                _col.Name = _colm.ColumnName;
                _col.HeaderText = string.Concat(_colm.ColumnName.Select(x => Char.IsUpper(x) ? " " + x : x.ToString())).TrimStart(' ');
                gdv.Columns.Add(_col);
            }
            foreach (DataRow _row in table.Select())
            {
                //Rows getting added in dgv but not data
                // By adding following line in Code my problem get solved
                //object[] _items = _row.ItemArray;
                gdv.Rows.Add(_row);
            }
        }
    }

我可以在不使用DataSource属性的情况下在DataGridView中添加DataTable吗

您正试图将DataRow添加到DataGridView,而不是添加DataGridViewRow

看看visualstudio的intellisence告诉你关于DataGridView.Rows.Add()方法的内容。其中有4个:

  • Add()-将空行添加到DataGridView

  • Add(DataGridViewRow)-添加新行(这是您需要的)

  • Add(count)-将空行的[count]添加到DataGridView

  • Add(object[])添加新行并用值填充(您也可以使用此)

您当前正在使用最后一个:Add(object[])。编译器并没有抱怨,因为它将您传递给它的DataGridViewRow视为一个只有一个对象的对象数组。显然不是您想要的。

以下是相关问题:https://stackoverflow.com/a/9094325/891715

通过在DataGridView中添加行之前添加以下行,我的问题得到了解决。

   object[] _items = _row.ItemArray;