Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最后一行和倒数第二行显示相同的';当前行';指数_C#_Winforms_Datagridview - Fatal编程技术网

C# 最后一行和倒数第二行显示相同的';当前行';指数

C# 最后一行和倒数第二行显示相同的';当前行';指数,c#,winforms,datagridview,C#,Winforms,Datagridview,在Winforms C#(绑定到DataTable)中的DataBound DataGridView中,我试图确定用户是否选择了每当向网格中添加更多数据时自动添加的NewRow。如果选择了NewRow,我想忽略删除行的单击,但是在下面两个屏幕截图中,datagridview1.CurrentRow.Index返回相同的值。非常感谢您的帮助 在上述两种情况下,datagridview1.CurrentRow.Index显示1 我尝试使用了datagridview1.CurrentRow.IsNe

在Winforms C#(绑定到DataTable)中的DataBound DataGridView中,我试图确定用户是否选择了每当向网格中添加更多数据时自动添加的
NewRow
。如果选择了
NewRow
,我想忽略删除行的单击,但是在下面两个屏幕截图中,
datagridview1.CurrentRow.Index
返回相同的值。非常感谢您的帮助

在上述两种情况下,
datagridview1.CurrentRow.Index
显示
1

我尝试使用了
datagridview1.CurrentRow.IsNewRow
,但是因为索引显示的是相同的,所以显然不起作用

这是
deleteRow
按钮的代码

private void btnDeleteRow_Click(object sender, EventArgs e)
{
    try
    {
        int currentRowIndex = dataGridView1.CurrentRow.Index; // TESTING DURING DEBUG, THIS PRODUCES THE SAME VALUE FOR BOTH ROWS PICTURED
        if (dataGridView1.CurrentRow.IsNewRow) return;
        var counter = dataGridView1.CurrentRow.Cells[0].Value;
        dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
        new SqlCommand("DELETE FROM IncomingVisitorList WHERE Counter = " + counter, SqlConnection).ExecuteNonQuery();

    }
    catch { } // SUPPRESS/IGNORE NULL ROW EXCEPTION
}

我不确定为什么
IsNewRow
属性没有按描述工作,也不确定为什么返回的索引对于新行和包含数据的最后一行是相同的

下面是一个可能的解决方法。如果您获得第一个
int trueRowIndex=dataGridView1.SelectedCells[0].RowIndex它将返回正确的索引

前面的语句将为
datagridView1.CurrentCell.RowIndex返回相同的索引,除非它是新行。下面的代码就是一个例子

我希望我能有一个更好的答案来解释为什么,不幸的是,这是我目前唯一能提出的解决方案。我将尝试找出
IsNewRow
属性不适用于数据绑定项的原因。希望这有帮助

private void btnDelete_Click(object sender, EventArgs e) {
  try {
    int currentRowIndex = dataGridView1.CurrentCell.RowIndex;
    int trueRowIndex = dataGridView1.SelectedCells[0].RowIndex;
    //MessageBox.Show("currentRowIndex " + currentRowIndex + " true row index: " + trueRowIndex);
    if (currentRowIndex != trueRowIndex) {
      MessageBox.Show("Row Is New Row");
    }
    else {
      MessageBox.Show("Row Is not New Row");
      dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
      //new SqlCommand("DELETE FROM IncomingVisitorList WHERE Counter = " + counter, SqlConnection).ExecuteNonQuery();
    }
  }
  catch (Exception ex) {
    MessageBox.Show("Error: " + ex.Message);
  }
}

其中是确定所选行的代码。。如何使用此设置来确定是否选择了单元格、行或整行。。您能给您显示您试图确定它们所在的行索引或当前行的实际代码吗?@MethodMan请参阅更新。我不确定问题出在哪里……您发布的代码没有为两个不同的行返回相同的值。我在发布的代码中放置了一个消息框来显示
currentRowIndex
,数字与您描述的不同。我遗漏了什么吗?@JohnG这可能与我使用组合框列有关吗???组合框列似乎没有什么区别…但行索引不同。我很好奇为什么您会关心存在哪一行索引…如果所选行是新行,只需忽略它,因为发布的代码似乎成功地完成了这项工作。