如何检查是否有任何行添加到Datagridview

时间:2012-03-02 05:41:35

标签: c# datagridview bindingsource

我在winform上使用Datagridview控件,在数据上使用绑定源。数据填充在bindingsource中,因此填充了datagridview。我正在寻找一个事件或类似的东西,当bindingsource中的一行被添加到datagridview时会触发。

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

编辑1:假设我在数据库表中有10条记录。我将这些提取到bindingsource并使用bindingsource作为Datagridview的数据源。现在,在向Datagridview添加行时,我想在Datagridview上执行一些UI操作。我使用了RowsAdded事件,但它总是给我RowIndex为0或1。我还尝试了一个关于RowsCount的foreach循环,如果我调试代码,执行流程符合预期,但在UI上却没有得到反映。一切都完成后,我调用了Datagridview1.refresh()。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

根据您希望在绑定后执行的操作,您可以使用Control.BindingContextChanged事件来迭代网格行:

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

    }
}

如果它不起作用你能说出你在绑定后究竟想要完成什么?