0

这是将 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);
            }
        }
    }
4

2 回答 2

0

您正在尝试将 DataRow 添加到 DataGridView 而不是添加 DataGridViewRow

看看 visualstudio 的智能告诉您有关 DataGridView.Rows.Add() 方法的内容。其中有 4 个:

  • Add() - 向 DataGridView 添加一个空行

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

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

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

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

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

于 2013-08-21T15:18:58.903 回答
0

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

   object[] _items = _row.ItemArray;
于 2013-08-22T05:19:57.127 回答