调整表的大小以适合数据网格视图 C#

本文关键字:数据网 数据 网格 视图 调整 | 更新日期: 2023-09-27 18:37:08

我希望我的表大小适合数据网格视图。数据网格视图大小始终相同,但表的行数和列数可能会发生变化。

以下是我填充表格的方式:

public DataTable createGridForForm(int rows, int columns)
{              
    // Create the output table.
    DataTable table = new DataTable();
    for (int i = 1; i <= columns; i++)
    {
        table.Columns.Add("column " + i.ToString());
    }
    for (int i = 1; i < rows; i++)
    {
        DataRow dr = table.NewRow();
        // populate data row with values here
        ListBox test = new ListBox();
        myTabPage.Controls.Add(test);
        table.Rows.Add(dr);
    }
    return table;
}

以下是我创建数据网格视图的方法:

private void createGridInForm(int rows, int columns)
{
    DataGridView RunTimeCreatedDataGridView = new DataGridView();
    RunTimeCreatedDataGridView.DataSource = createGridForForm(rows, columns);
    //DataGridViewColumn ID_Column = RunTimeCreatedDataGridView.Columns[0];
    //ID_Column.Width = 200;
    int positionForTable = getLocationForTable();
    RunTimeCreatedDataGridView.BackgroundColor = Color.WhiteSmoke;
    RunTimeCreatedDataGridView.Size = new Size(995, 200);
    RunTimeCreatedDataGridView.Location = new Point(5, positionForTable);
    myTabPage.Controls.Add(RunTimeCreatedDataGridView);                   
}

尝试此代码时出现错误:

//DataGridViewColumn ID_Column = RunTimeCreatedDataGridView.Columns[0];
//ID_Column.Width = 200;

该错误指出:

指数超出范围。它不能是负数,并且必须小于大小

调整表的大小以适合数据网格视图 C#

就是

这样

对于宽度-

RunTimeCreatedDataGridView.AutoSizeColumnsMode=System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;

而对于高度——

totalRowHeight = RunTimeCreatedDataGridView.ColumnHeadersHeight;
            foreach (DataGridViewRow row in RunTimeCreatedDataGridView.Rows)
                totalRowHeight += row.Height;

如果在 get Columns[0] 之前将数据网格添加到选项卡控件,则不会收到该错误。你的代码应该是这样的:

DataGridView RunTimeCreatedDataGridView = new DataGridView();
myTabPage.Controls.Add(RunTimeCreatedDataGridView);
RunTimeCreatedDataGridView.DataSource = createGridForForm(rows, columns);
DataGridViewColumn ID_Column = RunTimeCreatedDataGridView.Columns[0];
ID_Column.Width = 200;

编辑:

我添加详细的线条来填充您的DataGridView到它的容器中。

private void createGridInForm(int rows, int columns)
{
    DataGridView RunTimeCreatedDataGridView = new DataGridView();
    RunTimeCreatedDataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
    myTabPage.Controls.Add(RunTimeCreatedDataGridView);
    RunTimeCreatedDataGridView.DataSource = createGridForForm(rows, columns);
    // fill the gridview to its container
    DataGridViewColumn ID_Column = RunTimeCreatedDataGridView.Columns[0];
    ID_Column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
    RunTimeCreatedDataGridView.Dock = DockStyle.Fill;
}

以下行可用于在数据网格视图中用特定列填充额外空间

RunTimeCreatedDataGridView .Columns["column_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

如果将所有列的此属性设置为"数据网格视图自动大小列模式.填充",则所有列的宽度相同