我在C#中有一个DataGridView
,我希望以编程的方式添加行。没有数据绑定到网格,但是当我调用dataGrid.Rows.Add();
时,它会抛出System.InvalidOperationException
。
我浏览了整个互联网,但我发现这个问题对于那些有数据绑定的人来说。我希望从代码中完全控制网格。
有人可以帮我这个吗?
不确定它是否有所作为,但我使用.Net framework 3.5。
答案 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中的行 这似乎修复了未显示的行和异常。
无论如何,谢谢你的输入!