如何更改放置在不同TabControl页面上的datadridview列宽度

mbi*_*gun 0 c# datagridview datagridviewcolumn winforms

我的表格上有一个带有两页的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;
                }        
             }
      }
Run Code Online (Sandbox Code Playgroud)

我的两个datagridviews都是从数据库中获取数据.对于我的第一个datagridview,一切都很好.但是当我尝试在第二个TabPage上更改第二个datagridview的列宽时,我收到一条消息Object reference not set to an instance of an object.但为什么?在下面的屏幕截图中,您可以看到第二个datagridview的列名存在,但我无法更改它的列宽.

错误截图

我做错了什么?我的datagrid不是空的并且包含数据.我应该先激活我的TabPage还是别的什么?

小智 7

我有同样的问题.显然发生崩溃是因为没有显示控件.我在表单的Shown()事件中设置宽度,然后它对我有效.