我的窗體上有兩個頁面的TabControl。每個頁面都包含一個datagridview。在Form.Load
事件中,我正在填充SQL數據庫中的datagridviews,並更改這些網格的一些列寬。如何更改放置在不同TabControl頁面上的datadridview列寬度
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;
}
}
}
我的兩個datagridviews都從數據庫中獲取數據。對於我的第一個datagridview,一切正常。但是當我嘗試更改第二個TabPage上的第二個datagridview的列寬時,我收到一條消息Object reference not set to an instance of an object
。但爲什麼?在下面的截圖中,您可以看到第二個datagridview的列名存在,但我無法更改它的列寬。
我做錯了什麼?我的數據網格不是空的並且包含數據。我應該首先激活我的TabPage還是其他的?
非常感謝!它在這種情況下工作:col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;但無論如何,這很奇怪,爲什麼我不能改變列的寬度,如col.Width = 30. – mbigun 2012-08-08 15:26:42