Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改放置在不同TabControl页上的datadridview列宽度_C#_Winforms_Datagridview_Datagridviewcolumn - Fatal编程技术网

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

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) {

我的表单上有一个选项卡控件,有两页。每个页面都包含一个datagridview。在
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;
...