如何向未绑定的DataGridView添加行?

时间:2012-02-01 10:17:51

标签: c# datagridview

我在C#中有一个DataGridView,我希望以编程的方式添加行。没有数据绑定到网格,但是当我调用dataGrid.Rows.Add();时,它会抛出System.InvalidOperationException

我浏览了整个互联网,但我发现这个问题对于那些有数据绑定的人来说。我希望从代码中完全控制网格。

有人可以帮我这个吗?

不确定它是否有所作为,但我使用.Net framework 3.5。

3 个答案:

答案 0 :(得分:6)

假设您已经使用设计器或代码创建了列:

var row = (DataGridViewRow)myDataGridView.RowTemplate.Clone();
row.CreateCells(myDataGridView, "I'm Cell 1", "I'm Cell 2", "etc.");
myDataGridView.Rows.Add(row);

理想情况下,如果要添加多行,则可以预先创建一个行数组,然后调用AddRange(rows);

示例:

void PopulateGrid()
{
    //Consider Suspend-Resume Layout, YMMV.
    var rows = myData.Select(data => CreateRow(data)).ToArray();
    myDataGridView.Rows.AddRange(rows);
}

DataGridViewRow CreateRow(MyData data)
{
    var row = (DataGridViewRow)myDataGridView.RowTemplate.Clone();
    row.CreateCells(myDataGridView, data.Text, data.Date, date.Value);
    return row;
}

答案 1 :(得分:2)

我能给出的最简单的例子是:

/// <summary>
/// Shows example usage of Add method on Rows.
/// </summary>
void M()
{
    //
    // n is the new index. The cells must also be accessed by an index.
    // In this example, there are four cells in each row.
    //
    int n = dataGridView1.Rows.Add();

    dataGridView1.Rows[n].Cells[0].Value = title;
    dataGridView1.Rows[n].Cells[1].Value = dateTimeNow;

    //
    // The second cell is a date cell, use typeof(DateTime).
    //
    dataGridView1.Rows[n].Cells[1].ValueType = typeof(DateTime);
    dataGridView1.Rows[n].Cells[2].Value = wordCount;
}

答案 2 :(得分:0)

我通常会选择其他人提供的答案,但事实并非如此,因为答案并不真正有用。

正如我所说“dataGridView1.Rows.Add();”抛出异常,AddRange也是如此 经过大量检查后我找到了答案。显然.Net不喜欢它,如果我添加很多行/秒(约30) 我通过网络接收我的行,所以我创建了一个行池,每秒我都会更新datagridview中的行 这似乎修复了未显示的行和异常。

无论如何,谢谢你的输入!