C# 如何更改放置在不同TabControl页上的datadridview列宽度
我的表单上有一个选项卡控件,有两页。每个页面都包含一个datagridview。在C# 如何更改放置在不同TabControl页上的datadridview列宽度,c#,winforms,datagridview,datagridviewcolumn,C#,Winforms,Datagridview,Datagridviewcolumn,我的表单上有一个选项卡控件,有两页。每个页面都包含一个datagridview。在Form.Load事件中,我正在从SQL数据库填充DataGridView,并更改这些网格的一些列宽 DataTable GLOBAL_TABLE = new DataTable(); object[] GLOBAL_PARAMETERS = new object[50]; private void frmMAIN_Load(object sender, EventArgs e) {
Form.Load
事件中,我正在从SQL数据库填充DataGridView,并更改这些网格的一些列宽
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,一切正常。但是,当我尝试在第二个选项卡页上更改第二个datagridview的列宽时,会收到一条消息对象引用未设置为对象的实例。但是为什么呢?在下面的屏幕截图上,您可以看到第二个datagridview的列名存在,但我无法更改它的列宽
我做错了什么?我的数据网格不是空的,包含数据。我应该先激活我的标签页还是其他什么 当我自己尝试时,我无法重现你的问题。但是,如果您事先知道自己的列名,我将使用以下方法:
dgv_MAIN_substitution.Columns["Dummy"].Width = 30;
dgv_MAIN_substitution.Columns["MOQ"].Width = 30;
dgv_MAIN_substitution.Columns["Inactive"].Width = 30;
及
它比foreach循环和switch语句更简洁。您可以做的另一件事是设置Column.AutoSizeMode:
dgv_MAIN_orders.Columns["PO Number"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
这样它就可以自动调整宽度,而无需您的干预 我也有同样的问题。显然,崩溃是因为控件未显示。我在表单的Showed()事件中设置了宽度,然后它对我起了作用。当我试图通过以下代码调整列的大小时,我遇到了相同的异常:
this.DGVproOrder.Columns[0].Width = 86;
this.DGVproOrder.Columns[1].Width = 166;
...
问题是因为我将数据网格视图属性“自动调整列大小”模式设置为“填充”以填充容器,但当我将其设置为null时,一切都很好。非常感谢!它在这种情况下工作:col.AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells;但无论如何,很奇怪为什么我不能更改列宽,比如col.Width=30。或者更好,我们应该在ColumnAdded事件处理程序中完成这项工作,它总是这样工作:)
this.DGVproOrder.Columns[0].Width = 86;
this.DGVproOrder.Columns[1].Width = 166;
...