gpt4 book ai didi

c# - "NullReferenceException"尝试设置 DataGridView 列宽时,否则会正常显示数据

转载 作者:太空狗 更新时间:2023-10-30 00:10:05 24 4
gpt4 key购买 nike

我从存储过程中获取数据,这可以很好地显示在数据网格中,但是设置列宽会一直抛出空异常:

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;

}

最佳答案

我遇到了这个确切的问题,偶然发现了一个不起眼的解决方案在设置宽度 之前设置列的AutoSizeMode。示例:

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

关于c# - "NullReferenceException"尝试设置 DataGridView 列宽时,否则会正常显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com