簡體   English   中英

Datagridview NullReferenceException 在計時器中更新時出錯

[英]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.

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