簡體   English   中英

嘗試設置DataGridView列寬時“NullReferenceException”,否則會帶來數據

[英]“NullReferenceException” when trying to set DataGridView column width, brings through data fine otherwise

我從存儲過程中獲取數據,這可以在datagrid中顯示,但設置列寬度會不斷拋出空異常:

dataGridView2.Columns[x].Width = 60;

完整代碼:

public void Populate_Data_Grid2_All()
    {
        string sqlQuery = "EXEC sp_CG_GMR_Select_Specific_Data";

        using (var connection = new SqlConnection(connectionString))
        using (var command = new SqlCommand(sqlQuery, connection))
        using (var adapter = new SqlDataAdapter(command))
        {
            connection.Open();
            var myTable = new DataTable();
            adapter.Fill(myTable);
            dataGridView2.DataSource = myTable;
        }

        dataGridView2.Columns[0].Width = 60;
        dataGridView2.Columns[0].ReadOnly = true;
        dataGridView2.Columns[1].Width = 40;
        dataGridView2.Columns[1].ReadOnly = true;
        dataGridView2.Columns[2].Width = 50;
        dataGridView2.Columns[2].ReadOnly = true;
        dataGridView2.Columns[3].Width = 250;
        dataGridView2.Columns[3].ReadOnly = true;
        dataGridView2.Columns[4].Width = 100;
        dataGridView2.Columns[4].ReadOnly = true;
        dataGridView2.Columns[4].DefaultCellStyle.Format = "N2";
    } 

設置ReadOnly和單元格樣式不會拋出錯誤,但設置寬度會。 此代碼與我對程序中的另一個數據網格所做的完全相同,后者從不同的過程中引入了更多列。 我正在嘗試格式化的過程現在沒有任何空白值或任何東西。

編輯:為清楚起見,這里是其他數據網格執行相同的事情的代碼完全正常。 第二個數據網格也是第一個的副本,因此它的所有設置都是相同的(我也檢查過以確保)

碼:

public void Populate_Data_Grid1(string DataExists, string Scheme)
        {
            string NoCurrentPeriodData = "EXEC sp_CG_GMR_Scheme_Manual_Entry_Template @Scheme = '"+Scheme+"'";

            string YesCurrentPeriodData = "EXEC sp_CG_GMR_Current_Period_Data @Scheme = '"+Scheme+"'";

            string sqlQuery;

            if(DataExists())
            {
                sqlQuery = YesCurrentPeriodData;
            }
            else
            {
                sqlQuery = NoCurrentPeriodData;
            }

            using (var connection   = new SqlConnection(connectionString))
            using (var command      = new SqlCommand(sqlQuery, connection))
            using (var adapter      = new SqlDataAdapter(command))
            {
                connection.Open();
                var myTable = new DataTable();
                adapter.Fill(myTable);
                dg_Data1.DataSource = myTable;
            }

            //--Data Grid Column Properties--\\
            dg_Data1.Columns[0].Visible = false;
            dg_Data1.Columns[2].Visible = false;
            dg_Data1.Columns[4].Visible = false;
            dg_Data1.Columns[6].Visible = false;

            dg_Data1.Columns[1].Width = 60;
            dg_Data1.Columns[1].ReadOnly = true;
            dg_Data1.Columns[3].Width = 40;
            dg_Data1.Columns[3].ReadOnly = true;
            dg_Data1.Columns[5].Width = 50;
            dg_Data1.Columns[5].ReadOnly = true;
            dg_Data1.Columns[7].Width = 250;
            dg_Data1.Columns[7].ReadOnly = true;
            dg_Data1.Columns[8].Width = 100;
            dg_Data1.Columns[8].DefaultCellStyle.Format = "N2";
            //dg_Data1.Columns[8].DefaultCellStyle.Format = "D";

            btn_SaveValues.Enabled = true;

        }

我遇到了這個確切的問題,偶然發現在設置Width之前設置列的AutoSizeMode的不顯眼的解決方案。 例:

dataGridView2.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView2.Columns[0].Width = 60;
dataGridView2.Columns[0].ReadOnly = true;

暫無
暫無

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

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