我的表单上有一个TabControl,它有两个页面。每个页面都包含一个datagridview。在Form.Load
事件中,我正在从SQL数据库填充我的datagridviews,并更改这些网格的一些列宽。
DataTable GLOBAL_TABLE = new DataTable();
object[] GLOBAL_PARAMETERS = new object[50];
private void frmMAIN_Load(object sender, EventArgs e)
{
LOAD_TAB_1();
LOAD_TAB_2();
}
void LOAD_TAB_1()
{
//SQLRELATION class contain method that execute stored procedure on server
//and return DataTAble
Array.Clear(GLOBAL_PARAMETERS, 0, GLOBAL_PARAMETERS.Length);
GLOBAL_PARAMETERS[0] = userID;
GLOBAL_PARAMETERS[1] = date_1.Date;
GLOBAL_PARAMETERS[2] = date_2.Date;
GLOBAL_TABLE = SQLRELATION.GET_PROCEDURE("PROC023", GLOBAL_PARAMETERS, true);
dgv_MAIN_substitution.DataSource = GLOBAL_TABLE;
//Here I'm changing my columns width
foreach (DataGridViewColumn col in dgv_MAIN_substitution.Columns)
{
switch (col.Name)
{
case "Dummy": col.Width = 30; break;
case "MOQ": col.Width = 30; break;
case "Inactive": col.Width = 30; break;
default: break;
}
}
}
void LOAD_TAB_2()
{
//The same I'm doing for the second datagridview
Array.Clear(GLOBAL_PARAMETERS, 0, GLOBAL_PARAMETERS.Length);
GLOBAL_PARAMETERS[0] = userID;
GLOBAL_PARAMETERS[1] = date_1.Date;
GLOBAL_PARAMETERS[2] = date_2.Date;
GLOBAL_TABLE = SQLRELATION.GET_PROCEDURE("PROC023", GLOBAL_PARAMETERS, true);
dgv_MAIN_orders.DataSource = GLOBAL_TABLE;
//Changing my columns width for second datagrigview
foreach (DataGridViewColumn col in dgv_MAIN_orders.Columns)
{
switch (col.Name)
{
//Error if HERE!
case "Status": col.Width = 30; break;
case "PO Number": col.Width = 150; break;
default: col.Width = 40; break;
}
}
}
我的两个datagridview都从数据库获取数据。对于我的第一个datagridview,一切正常。但是当我试图在第二个TabPage上更改第二个datagridview的列宽时,我得到一条消息Object reference not set to an instance of an object
。但是为什么呢?在下面的屏幕截图中,你可以看到第二个datagridview的列名存在,但是我不能更改它的列宽。
我做错了什么?我的数据网格不是空的,并且包含数据。我应该首先激活我的TabPage还是其他什么?
4条答案
按热度按时间fsi0uk1n1#
我遇到了同样的问题。显然崩溃是因为控件没有显示。我在窗体的Shown()事件中设置了宽度,然后它就为我工作了。
6gpjuf902#
我不能重现你的问题,当我尝试了我自己.然而,如果你知道你的列名之前手,我只会使用这种方法:
和
这比foreach循环和switch语句更简洁。你可以做的另一件事是设置Column.AutoSizeMode:
这样它就可以自动调整你的宽度而无需你的干预。
ergxz8rk3#
我使用此代码设置列宽,然后由用户Public Sub SetGridColWidthsAuto(ByRef DG As DataGridView)存储宽度'将提供的Datagrid中的所有列设置为自动调整大小。'设置列宽属性'将它们重新设置为不自动调整大小,以便用户可以调整它们的大小
但是我发现它不起作用,除非标签控件是通过选定索引选择的。
从加载或显示。当然,我已经尝试了刷新的DG沙标签控件,整个形式,并更新。有某种片状在那里
3htmauhk4#
当我尝试通过以下代码调整列的大小时,也出现了同样的异常:
问题是因为我设置了数据网格视图属性auto size columns mode来填充容器,但是当我将它设置回null时,一切都工作得很好。