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

时间:2013-08-21 14:51:36

标签: c# datagridview datatable

以下是将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);
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

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

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

  • Add() - 向DataGridView

  • 添加一个空行
  • 添加(DataGridViewRow) - 添加新行(这是您需要的)

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

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

您目前正在使用最后一个:Add(object [])。编译器不会抱怨,因为它将DataGridViewRow视为一个只包含一个对象的对象数组。显然不是你想要的。

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

答案 1 :(得分:0)

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

   object[] _items = _row.ItemArray;