2017-04-26 76 views
1

在Winforms C#(綁定到DataTable)的DataBound DataGridView中,我試圖確定用戶是否選擇了每次都會自動添加的NewRow數據被添加到網格中。如果選擇NewRow,我想忽略刪除行點擊,但在下面的2個屏幕截圖中,datagridview1.CurrentRow.Index返回相同的值。任何幫助深表感謝!顯示相同'CurrentRow'索引的最後和倒數第二行

enter image description here

在上述兩種情況下,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 
} 
+0

你在哪裏代碼確定選定的行..你如何有這個設置,以確定是否CELL或行或全行被選中..你能告訴你實際的代碼,你試圖確定行索引或當前行他們在? – MethodMan

+0

@MethodMan看到更新。 –

+0

我不確定問題是什麼......您發佈的代碼不會爲兩個不同的行返回相同的值。我在發佈的代碼中放置了一個消息框來顯示'currentRowIndex',並且這些數字與您描述的不一樣。我錯過了什麼嗎? – JohnG

回答

2

我不知道爲什麼IsNewRow屬性沒有工作描述和我也不知道爲什麼返回的索引是爲新行相同,代碼數據的最後一行。

下面是一種可能的解決方法。看起來,如果你得到第一個int trueRowIndex = dataGridView1.SelectedCells[0].RowIndex;它將返回正確的索引。

前面的聲明將返回相同的索引datagridView1.CurrentCell.RowIndex除非它是新行。下面的代碼就是一個例子。

我希望我有一個更好的答案,爲什麼,不幸的是,這種替代方案是我現在可以建議的唯一解決方案。我將嘗試找出爲什麼IsNewRow屬性不適用於DataBound項目。希望這可以幫助。

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); 
    } 
} 
相關問題