2012-03-02 53 views
1

我正在Winform上使用Datagridview控件,并使用数据的绑定源。数据填充在绑定源中,并相应填充datagridview。我正在寻找一个事件或类似的东西,这会在来自bindingsource的行被添加到datagridview时触发。如何检查是否有任何行添加到Datagridview

我想对添加的行执行一些操作。我尝试了RowsAdded事件,但e.RowIndex没有正确检索。

编辑1:假设我在数据库表中有10条记录。我将这些数据提取到bindingsource中,并使用bindingsource作为Datagridview的数据源。在向Datagridview添加行时,我想对Datagridview执行一些UI操作。我使用了RowsAdded事件,但它始终将RowIndex指定为0或1。我也尝试了一个遍历RowsCount的foreach循环,如果我调试代码,执行流程符合预期,但在UI上却没有得到体现。在完成所有事情之后,我已经调用了Datagridview1.refresh()。

你能帮我解决这个问题吗?

+1

还有一个'RowCount'属性可能有助于解决索引问题(只是一个猜测,因为你没有解释什么是问题)*没有被正确检索*没有说太多! – V4Vendetta 2012-03-02 05:52:17

+0

真的很抱歉的简短描述。其实我也没有得到如何解释这种情况。请找到Edit1。 – 2012-03-02 06:12:50

回答

2

当用户使用新记录的行添加新行时,此事件的处理程序中的DataGridViewRowsAddedEventArgs.RowIndex值等于新记录的行的新位置的索引,该值大于该行刚添加。

但是,如果以编程方式添加行,则RowIndex值是所添加第一行的 索引。

private void dataGridView1_NewRowNeeded(object sender, 
    DataGridViewRowEventArgs e) 
{ 
    newRowNeeded = true; 
} 

private void dataGridView1_RowsAdded(object sender, 
    DataGridViewRowsAddedEventArgs e) 
{ 
    if (newRowNeeded) 
    { 
     newRowNeeded = false; 
     numberOfRows = numberOfRows + 1; 
    } 
} 

去给你确切的行指msdn rowadded link

0

取决于你希望绑定,您可以使用Control.BindingContextChanged事件迭代网格上的行后进行操作:

private void dataGridView1_BindingContextChanged(object sender, EventArgs e) 
{ 
    foreach (var row in dataGridView1.Rows) { 

    } 
} 

如果它不能正常工作,你能否说出你在绑定后究竟想要完成什么?

+0

这是第一次迭代的工作。当我点击一个菜单项来打开表单时,第一次UI变化被反映出来。但是,如果我从菜单项中打开相同的内容,而不关闭表单,则不会应用UI更改。 (我正在改变一些单元格的BackColor)。 – 2012-03-02 07:12:39

+0

我用一个按钮创建了一个窗体,并在点击具有该网格的另一个窗体的2个实例时打开。我在上面的方法中添加了代码来更改某个单元格的bg颜色,并且这些更改都反映在两个打开的实例中,因此无法重现 – ionden 2012-03-02 07:30:56

相关问题