C#Datagrid没有使用WinForm进行大小调整

时间:2018-06-14 10:23:28

标签: c# winforms datagridview

我已将一些数据绑定到WinForm中的DataGrid。无论我在更改列的大小(例如AutoSizeModeDataGridViewAutoSizeColumnMode)方面做了什么,我都无法让我的DataGrid填充我的WinForm,当我调整WinForm的大小时,Datagrid的大小是修复并没有使用WinForm调整大小。要么我得到一个滚动条,如果dataGrid比表格大,或者我在最后一列之后留下了一个巨大的空间。

我得到的结果如下图所示。任何人都可以帮助使datagrid适合表单,并使用表单调整大小?谢谢。

DataGrid

这不是我的DataGrid,只是来自互联网的图片,但它与我的结果相同。

这是代码

enter link description here

PS:我还没有找到100%的解决方案,但是一个解决方法,问题是DataGrid源是一个DataTable,它有一个DataTableStyle,并且一个人以某种方式调整所有列的大小(仍然无法弄清楚)因为我的解决方法是我在菜单中添加了一个Auto Align按钮,它通过计算DataGridView宽度来重置列宽,并且只是根据DataTable中的列数来调整它,然后调整每个{{ 1}}在DataTablestyle和voilà

3 个答案:

答案 0 :(得分:1)

DataGridView上有一个名为AutoSizeColumnMode的属性,如果你想达到预期的效果,请确保将其设置为Fill(参见下面的图片)。并且还要注意,您需要将AutoSizeMode设置为至少填充一列。 enter image description here

修改

好的,我会为你做一个例子。让我们假设你有一个名为Form1的空表单的WinForm应用程序。只需将下面的代码粘贴到您的表单中,然后告诉我它是否可以正常工作:

        DataGridView dataGridView1;

        public Form1()
        {
            InitializeComponent();
            dataGridView1 = new System.Windows.Forms.DataGridView();
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dataGridView1.Dock = DockStyle.Fill;
            // we will create two columns that will resize based on content within cells
            for (var i = 0; i < 2; i++)
            {
                var column = new DataGridViewTextBoxColumn()
                {
                    HeaderText = $"Column{i} - AllCells",
                    AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
                };
                dataGridView1.Columns.Add(column);
            }
            // And one column that fill fill the rest of the grid 
            var fillColumn = new DataGridViewTextBoxColumn()
            {
                HeaderText = "FillColumn",
                AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            };
            dataGridView1.Columns.Add(fillColumn);
            // so we've got grid with 3 columns let's fill some random data
            dataGridView1.Rows.Add("test", "test", "test test test");
            dataGridView1.Rows.Add("test", "test", "test test test");
            dataGridView1.Rows.Add("test", "test", "test test test");
            dataGridView1.Rows.Add("test", "test", "test test test");
            Controls.Add(dataGridView1);
        }

答案 1 :(得分:1)

Anchor 属性可以完成这项工作。只需选择所有方向(上,下,左,右)。您可以由设计人员或以编程方式完成。

enter image description here

<div class="gallery-wrap">


  <div class="img-big-wrap">
    <a id="mainimagelink" href="#">
    <img id="bigImage" class="img-big-wrap" src="http://via.placeholder.com/300.png" alt="">
    </a>
  </div>

  <div id="myImgDiv" class="img-small-wrap">
    <div class="item-gallery"> <img src="https://getuikit.com/v2/docs/images/placeholder_200x100.svg" data-link="1"> </div>
    <div class="item-gallery"> <img src="https://cdn.dribbble.com/users/312581/screenshots/1676038/female-placeholder_1x.png" data-link="2"> </div>
    <div class="item-gallery"> <img src="https://d30y9cdsu7xlg0.cloudfront.net/png/1134418-200.png" data-link="3"> </div>
    <div class="item-gallery"> <img src="https://source.sierrawireless.com/~/media/developer%20zone/icons/sw_dz_icons_placeholder.ashx?h=240&la=en&w=240" data-link="4"> </div>
  </div>

答案 2 :(得分:1)

如果您希望dataGridView填充表单, 然后在DataGridView中有一个名为property的{​​{1}}。将此属性设置为填充 并且dataGridView将完全填充表单,即使在调整大小时,它也会对调整大小做出响应。 如果您想填写表单,这将适用于您。

但是如果表单中有其他组件,则必须使用Dock属性。由于dataGridView将使用Form重新调整大小,而不会完全填充表单。