2012-08-08 25 views
0

我的窗體上有兩個頁面的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的列名存在,但我無法更改它的列寬。

Error screenshot

我做錯了什麼?我的數據網格不是空的並且包含數據。我應該首先激活我的TabPage還是其他的?

回答

3

當我嘗試自我時,我無法重現您的問題。但是,如果你的手之前知道你的列名,我只想用這種方式:

dgv_MAIN_substitution.Columns["Dummy"].Width = 30; 
dgv_MAIN_substitution.Columns["MOQ"].Width = 30; 
dgv_MAIN_substitution.Columns["Inactive"].Width = 30; 

dgv_MAIN_orders.Columns["Status"].Width = 30; 
dgv_MAIN_orders.Columns["PO Number"].Width = 150; 

比foreach循環和switch語句清潔。你可以做的另一件事是設置Column.AutoSizeMode:

dgv_MAIN_orders.Columns["PO Number"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 

因此它會自動調整你的寬度,無需人工干預。

+0

非常感謝!它在這種情況下工作:col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;但無論如何,這很奇怪,爲什麼我不能改變列的寬度,如col.Width = 30. – mbigun 2012-08-08 15:26:42

7

我有同樣的問題。顯然發生崩潰是因爲控制不顯示。我在窗體的Shown()事件中設置了寬度,然後它對我有效。

+0

這對我來說也是如此 – 2013-01-27 07:15:01

+1

甚至更​​好,我們應該在ColumnAdded事件處理程序中完成這項工作,它始終以這種方式工作:) – 2013-05-17 14:55:40

-1

我有同樣的異常,當我試圖通過這個代碼,以調整列:

this.DGVproOrder.Columns[0].Width = 86; 
this.DGVproOrder.Columns[1].Width = 166; 
... 

問題是因爲我設置數據網格視圖屬性自動調整大小列模式,以填補填充容器,但是當我把它設置爲空,每件事情都很好。

相關問題