![](/img/trans.png)
[英]What Causes this NullReferenceException when Accessing a Cell of a DataGridView?
[英]Datagridview NullReferenceException Error when renewing in timer
我有一個應用程序,我需要將某個數字作為參考值發送到 PLC。 為此,我從數據庫中獲取所有行並將它們列在我的 datagridview (dgv) 上,並使用計時器重新加載帶有更新行的 datagridview。 要加載數據,我使用下面的代碼;
public void updatedgv()
{
try
{
using (SqlConnection con = new SqlConnection(Program.sqlcon))
{
string q = "SELECT CONCAT(RL.istekID,'-',RL.lineID) '#',M.makName 'Makine Adı',R.partiNo 'PartiNo',C.kimAd 'Kimyasal',RL.miktar 'Miktar',RL.durum 'Durum', RL.lineID 'Kuyruk No' FROM RECLN RL JOIN REC R ON RL.istekID=R.istekID JOIN MAK M ON R.makID=M.makID JOIN CHEM C ON C.kimID=RL.kimID WHERE RL.durum IN (1,2)";
using (SqlCommand com = new SqlCommand(q, con))
{
if (con.State == ConnectionState.Closed) { con.Open(); } else { con.Close(); con.Open(); }
using (SqlDataAdapter sda = new SqlDataAdapter(com))
{
try
{
dt = new DataTable();
sda.Fill(dt);
dgv.DataSource = dt;
}
catch (Exception ex) { this.Text = ex.Message; }
}
}
}
}
catch (Exception ex) { this.Text = ex.Message; }
}
但有時,它會出現以下錯誤,並且我的應用程序停止工作。
System.NullReferenceException: 'Object reference not set to an instance of an object.'
我已經盡一切努力避免這個問題,但不幸的是,我找不到我需要做的事情。
我相信我的代碼做錯了,但我無法弄清楚。
你應該在你的問題上付出更多的努力,當不清楚時,它會浪費可以幫助的人的時間,並且很難回答。
我懷疑您的設計存在一些根本錯誤。
首先,如果您只需要數據庫中的一些數據,那么不要拉出所有要處理的表(也就是從中取一個值),而是將過濾器放入 SQL 語句並獲取一個標量值(或減少的結果集,任何合適的)。
要回答這個問題,為了避免您得到的錯誤(假設它來自您提到的單元格的讀取,這實際上很可能),您只需要確保您正在讀取現有單元格和現有值:
if (dgv.Rows.Count > 0) // check row exists, to work with a row
{
DataGridViewRow irow = dgv.Rows(0);
if (dgv.Columns.Count > 0) // check column exists, to work with a row
{
// Dim icol As DataGridViewColumn = dgv.Columns(0) ' <<< if column reference needed
DataGridViewCell icell = irow.Cells(0);
if (!IsDBNull(icell) && !IsNothing(icell)) // check cell is not empty
myResult = icell.Value.ToString();// <<< Mind datatypes and type conversions! Not shown here!
}
}
我的猜測是,有時您會在該單元格中獲得一個dbnull
值並且您的程序崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.