【问题标题】:DataGridView - how to set column width?DataGridView - 如何设置列宽?
【发布时间】:2011-01-10 09:09:53
【问题描述】:

我有一个带有DataGridView 控件的 WinForms 应用程序。我的控件有五个 列(比如“姓名”、“地址”、“电话”等)

我对默认列宽不满意。我想更好地控制列的外观。我想要的是 是能够做到以下之一:

  • 以百分比设置每列的宽度
  • 以像素为单位设置每列的宽度
  • 使用其他一些最实用的方法(使宽度适合文本等)

请建议 - 使用哪个属性以及如何使用。

【问题讨论】:

    标签: .net winforms datagridview controls


    【解决方案1】:

    您可以使用 DataGridViewColumn.Width 属性来做到这一点:

    DataGridViewColumn column = dataGridView.Columns[0];
    column.Width = 60;
    

    http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx

    【讨论】:

    • 谢谢!我才意识到为什么它对我不起作用。 MSDN说如果设置这个属性时指定的值小于MinimumWidth属性的值,就改用MinimumWidth属性值。
    • 是的,Grid控件不能直接使用宽度,所以你使用ItemStyle.With来设置它的属性。
    • 要添加到此,如果在 Visual Studio 中工作,请右键单击,单击编辑列,然后向下滚动。该属性(即 column.width)将存在。
    【解决方案2】:

    以下也可以尝试:

    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
    

    或使用DataGridViewAutoSizeColumnsMode枚举中的其他设置选项

    【讨论】:

    • 这是最好的答案。然后你可以调整表单的大小以适应 DataGridView 的宽度。谢谢马克!这为我省去了很多麻烦。
    • 当使用“填充”选项时,列会展开以填充网格的整个宽度。
    • 这真的比选择的答案更有用!
    【解决方案3】:

    上述大多数解决方案都假定父 DateGridView.AutoSizeMode 不等于 Fill。如果您将网格的.AutoSizeMode 设置为Fill,则需要将每个column 的AutoSizeMode 设置为None,如果您想修复特定的列宽(并让其他列填写)。如果您更改列宽并且 .AutoSizeMode 不是 None 首先,我发现一个关于空对象的奇怪 MS 异常。

    这行得通

    chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
    ... add some columns here
    chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    chart.Column[i].Width = 60;
    

    这会引发有关设置边框厚度的某些内部对象的空异常。

    chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
    ... add some columns here
     // chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    chart.Column[i].Width = 60;
    

    【讨论】:

    • 这帮助我从调试到几个小时..!!
    • 很好的建议,虽然真的很奇怪... :~
    【解决方案4】:

    我知道这是一个老问题,但没有人回答过第一部分,以百分比设置宽度。这可以通过FillWeight (MSDN) 轻松完成。以防其他人在搜索时遇到此答案。

    您可以在设计器中设置 DataGridAutoSizeColumnMode 为 Fill。默认情况下,每列的 FillWeight 为 100。然后在后面的代码中,在 FormLoad 事件上或将数据绑定到网格之后,您可以简单地:

    gridName.Columns[0].FillWeight = 200;
    gridName.Columns[1].FillWeight = 50;
    

    等等,无论你想要什么比例的重量。如果你想用加起来为 100 的数字来处理每一列,对于文字百分比宽度,你也可以这样做。

    它提供了一个很好的完整 DataGrid,其中标题使用整个空间,即使用户调整了窗口大小。在宽屏上看起来不错,4:3 等等。

    【讨论】:

      【解决方案5】:

      关于你最后的子弹

      使宽度适合文本

      您可以试验 DataGridViewColumn 的 .AutoSizeMode,将其设置为以下值之一:

      None
      AllCells
      AllCellsExceptHeader
      DisplayedCells
      DisplayedCellsExceptHeader
      ColumnHeader
      Fill
      

      MSDN 页面上的更多信息

      【讨论】:

        【解决方案6】:

        我建议像这样为所有网格的列指定宽度:

        DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
        col.HeaderText = "phone"            
        col.Width = 120;
        col.DataPropertyName = (if you use a datasource)
        thegrid.Columns.Add(col);    
        

        对于主要(或最长)列(比如说地址),这样做:

        col = new DataGridViewTextBoxColumn();
        col.HeaderText = "address";
        col.Width = 120;
        

        棘手的部分

        col.MinimumWidth = 120;
        col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        

        棘手的部分

        col.DataPropertyName = (same as above)
        thegrid.Columns.Add(col);
        

        这样,如果您拉伸表单(并且网格在他的容器中“填充”)主列,在这种情况下为地址列,将占用所有可用空间,但它永远不会小于 col。最小宽度,所以它是唯一调整大小的。

        我使用它,当我有一个网格并且它的最后一列用于显示图像(如图标详细信息或图标删除..)并且它没有标题并且它必须始终是最小的一个时。

        【讨论】:

          【解决方案7】:
          public static void ArrangeGrid(DataGridView Grid)
          { 
              int twidth=0;
              if (Grid.Rows.Count > 0)
              {
                  twidth = (Grid.Width * Grid.Columns.Count) / 100;
                  for (int i = 0; i < Grid.Columns.Count; i++)
                      {
                      Grid.Columns[i].Width = twidth;
                      }
          
              }
          }
          

          【讨论】:

            【解决方案8】:

            用途:

            yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
            

            【讨论】:

              【解决方案9】:
              DataGridView1.Columns.Item("Adress").Width = 60
                  DataGridView1.Columns.Item("Phone").Width = 30
                  DataGridView1.Columns.Item("Name").Width = 40
                  DataGridView1.Columns.Item("Etc.").Width = 30
              

              【讨论】:

              • 这在 VB.net WinForms 中非常有效。 5年后它帮助了我。谢谢。
              【解决方案10】:

              如果您不想以编程方式执行此操作,您可以操作位于 Columns 属性内的 Column width 属性。打开列编辑属性后,您可以选择要编辑的列,向下滚动到布局绑定列属性的部分并更改宽度。

              【讨论】:

                【解决方案11】:

                您可以通过一个循环为所有列和行设置默认宽度和高度,如下所示。

                    // DataGridView Name= dgvMachineStatus
                
                   foreach (DataGridViewColumn column in dgvMachineStatus.Columns)
                        {
                            column.Width = 155;
                        }
                
                   foreach (DataGridViewRow row in dgvMachineStatus.Rows)
                        {
                            row.Height = 45;
                        }
                

                【讨论】:

                  【解决方案12】:

                  使用 Columns 属性并将 Auto Size Mode 设置为 All Cells,Resizable 设置为 True,Frozen 设置为 False,并将其设置为 True。

                  该列将根据插入的数据自动调整大小。

                  【讨论】:

                    【解决方案13】:

                    简单

                    dataGridView1.Columns[0].FillWeight = 20;
                    

                    【讨论】:

                      【解决方案14】:

                      或者您可以直接转到表单,然后在调用要显示的数据时设置属性 喜欢 datagridview1.columns(0).width = 150 datagridview1.columns(1).width = 150 datagridview1.columns(2).width = 150enter code here

                      这么简单,对我来说效果很好,兄弟

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2015-04-16
                        • 2011-04-23
                        • 2011-06-23
                        • 2010-11-11
                        • 2012-01-11
                        • 1970-01-01
                        • 2011-03-28
                        相关资源
                        最近更新 更多