Datarow ItemArray在第一列中的DataGridViewButtonColumn不能正常工作

时间:2015-12-24 14:34:25

标签: c# winforms datagridview datatable

我有一个包含3列的datagridview。第一个是DataGridViewButtonColumn。其他的是从DB收集的,我使用datarow.ItemArray从数据表填充我的Datagridview。 由于第一列是DataGridViewButtonColumn,因此数据网格视图正在填充。第二列获取第三列的值,第三列为空。看起来第一列获得第二个值。我试图添加null或空值,但它没有帮助

DataTable dtSelect = dataView.ToTable(true, "item", "subItem");

        foreach (DataRow datarow in dtSelect.Rows)
        {
              DGV.Rows.Add(new object[] { null, datarow.ItemArray });
        }

现在最糟糕的是,第二列得到了值:System.Object []

如何使用item数组填充第一列中包含DatGridViewButtonColumn的Datagridview?

2 个答案:

答案 0 :(得分:1)

我将直接使用DataTable设置DataGridView.DataSource属性,然后在运行时创建DataGridViewButtonColumn。可以在需要的位置插入此列

DataTable dtSelect = dataView.ToTable(true, "item", "subItem");
DGV.AutoGenerateColumns = true;
DGV.DataSource = dtSelect;

// Create the column and insert it as the first column
DataGridViewButtonColumn cl = new DataGridViewButtonColumn();
cl.HeaderText = "Button column";
DGV.Columns.Insert(0, cl);

// Add the CellFormatting event to be able to change the button text
DGV.CellFormatting += DGV_CellFormatting;
.....


void DGV_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex == 0)
       e.Value = "Click Me";
}

答案 1 :(得分:1)

我建议你认真考虑Steve's answer。但如果你坚持,这是你原来问题的答案。您需要分配适当的object[],将ItemArray复制到其中(使用适当的偏移量)并将该数组传递给Add方法,如下所示

var values = new object[DGV.Columns.Count];
foreach (DataRow datarow in dtSelect.Rows)
{
    datarow.ItemArray.CopyTo(values, 1);
    DGV.Rows.Add(values);
}