0

我有一个在 DataGridView 中有一些数据的 WinForms 应用程序。如果用户双击一个单元格,则需要删除该行,除非他们先单击一个列以按该列对数据进行排序,否则该行工作正常。如果已排序,则事件的行索引仍然是指该行中的原始值(IE 排序数据后双击第一项将删除排序前位于顶部的行)。

有没有办法在排序发生时更新行索引?

当前初始化类似于:

 DataTable dt = new DataTable();
 NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection);
 da.Fill(dt);
 this.dgv1.DataSource = dt;

双击事件类似于:

private void dgv1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    DataTable dt = (DataTable)dgv1.DataSource;

    if (e.RowIndex > -1)
    {
        dt.Rows.RemoveAt(e.RowIndex);
    }
}

我怀疑这个问题很简单,我现在没有看到..

4

1 回答 1

1

您可以使用DataBoundItema的属性DataGridViewRow来引用底层DataRow并使用Remove方法来代替:

private void dgv1_CellDoubleClick(object sender, DataGridViewCellEventArgs e){
   DataTable dt = (DataTable)dgv1.DataSource;    
   if(e.RowIndex>-1)
      dt.Rows.Remove(((DataRowView)dgv1.Rows[e.RowIndex].DataBoundItem).Row);
}
于 2013-09-06T20:33:55.830 回答