如何将所有行放入datagridview,以便垂直滚动条不会出现C#?

时间:2017-09-19 13:31:29

标签: c# winforms datagridview

我在C#中有一个Windows Form Application的datagridview对象。用户可以添加一些行,但这仅限于任何数字,因此用户不能输入太多行。

我想让所有行(行高和字体大小)自动调整,以便它们可以适合datagridview并且不会出现垂直滚动条。有什么建议吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

您可以计算每行的可用空间,然后调整所有行的大小:

private void ResizeRows()
{
    // Calculate the font size
    float fontSize = calculateFontSize();

    // Resize the font of the DataGridView
    this.dataGridView1.Font = new Font(this.dataGridView1.Font.FontFamily, fontSize);

    // Get the height of the header row of the DataGridView
    int headerHeight = this.dataGridView1.Columns[0].Height;

    // Calculate the available space for the other rows
    int availableHeight = this.dataGridView1.Height - headerHeight - 2;

    float rowSize = (float)availableHeight / (float)this.dataGridView1.Rows.Count;

    // Resize each row in the DataGridView
    foreach (DataGridViewRow row in this.dataGridView1.Rows)
    {
        row.Height = (int)rowSize;
    }
}

您可以在两个DataGridView事件中添加对此方法的调用:

    private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        this.ResizeRows();
    }

    private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
    {
        this.ResizeRows();
    }

这样,每次添加或删除行时,DataGridView都应调整其行的大小。您可以在方法calculateFontSize

中体验不同的字体大小

答案 1 :(得分:0)

非常感谢Seiken,你的回答真的帮我解决了这个问题!它的某些部分对我不起作用,所以我改变了它们。我发现字体大小和行高之间的关系;我找到了三种不同行高的最佳字体大小,并进行回归以找到特定行高的最佳字体大小。

 private void ResizeRows()
    {
        // Get the height of the header row of the DataGridView
        int headerHeight = this.dataGridView1.ColumnHeadersHeight;

        // Calculate the available space for the other rows
        int availableHeight = this.dataGridView1.Height - headerHeight;

        float rowSize = (float)availableHeight / (float)this.dataGridView1.Rows.Count;

        float fontSize = 0.8367F * rowSize - 3.878F;

        // Resize each row in the DataGridView
        foreach (DataGridViewRow row in this.dataGridView1.Rows)
        {
            row.Height = (int)rowSize;
            row.DefaultCellStyle.Font= new Font(dataGridView1.Font.FontFamily, fontSize, GraphicsUnit.Pixel);
        }
    }