簡體   English   中英

是什么導致在訪問DataGridView的單元格時出現此NullReferenceException?

[英]What Causes this NullReferenceException when Accessing a Cell of a DataGridView?

我有一個DataGridView控件,正在檢查是否獲得了column 0的正確值

替代文字

但是當我單擊按鈕以回顯值時,我總是會收到此錯誤...

替代文字

我的代碼中有錯誤嗎? 要不然是啥?

當datagridview最初與數據綁定,並且您沒有單擊任何行,任何單元格或datagridview時,CurrentRow.Index屬性不會設置為“可見”所選行。 但是,當您遍歷每一行時,您會發現dgView.Rows [?]。Selected已設置為true或false。 您可以使用try catch創建一個方法,以在獲取CurrentRow.Index的屬性時捕獲異常。 請嘗試以下代碼。

try
{
    MessageBox.Show(dgView1[0,dgView1.CurrentRow.Index].Value.ToString());
}
catch
{
    for (int i = 0; i < dgView1.Rows.Count; i++)
    {
        if (dgView1.Rows[i].Selected) 
        {
           MessageBox.Show(dgView1[0,dgView1.Rows[i].Index].Value.ToString());
           return;
        }     
    }
}

將您的long / compound語句分解為幾行/語句:

  • dbView1是否為null?
  • dbView1.CurrentRow是否為null?
  • dbView1.CurrentRow.Index是否等於-1,或大於行數?
  • dbView1 [dbView1.CurrentRow.Index]是否為null?

我認為最可能的原因是,當您單擊按鈕時,表單的焦點位於第二行(帶*的行),直到您單擊並在該行的單元格中輸入內容后,該行才對其進行引用。 ,則會自動生成帶有*的另一行)。 如果您不希望自動生成行,只需將dataGridView1.AllowUserToAddRows設置為false。

我剛剛創建了一個新項目,但它確實起作用了……很奇怪。

嘗試更換

dgView.CurrentRow.IndexdgView.SelectedRows[0].Index

和屬性設置MultiselectFalseSelectionMode = FullRowSelect

有幫助嗎? :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM