繁体   English   中英

如果这是 DataGridView 的容器,则适合 TableLayoutPanel 的行

[英]Fit Row of TableLayoutPanel if this is the container of a DataGridView

带有 TableLayoutPanel 的表单

我有一个带有 TabPage 控件的表单。
正如您在附图中看到的那样,每个 TabPage 都有一个 Tablelayoutpanel。

Tablelayoutpanel 具有AutoScroll = True (我通过代码禁用水平滚动)。
表格布局面板大小为1209x372像素。

我的 Tablelayoutpanel 有 1 列和 6 行。
第一行和第三行里面有一个标签(标题)。
第二和第四行包含一个 DataGridView。

带有标签的行的“绝对”大小为21像素。

问题在于承载 DataGridView 控件的面板的高度。

我尝试将SizeType设置为AutomaticPercentage ,但是在设置 DataSource 时,面板不会调整为 DataGridViews 的大小。
如果我为每个面板设置一个绝对大小,它工作得很好,但是我必须尝试几个像素大小。 我手动完成。

我认为在这种情况下“自动”或“百分比”没有意义的原因是因为 DataGridViews 的高度可能大于 TablelayoutPanel 控件的高度。
Datagridviews 总是有AutoScroll = False

我读过这是优先事项:

当 TableLayoutPanel 控件排列其行时,它按以下顺序为每个 RowStyle 分配优先级:

  1. 首先考虑 RowStyle 设置为 Absolute 的行并为其分配固定高度。

  2. RowStyle 设置为 AutoSize 的行具有其内容的大小。

  3. 剩余空间在 RowStyle 设置为百分比的行之间划分。

然后我这样做了(通过运行时的代码):

private void RedimensionaDatagrid(TableLayoutPanel tlp,int indiceRowPanel, DataGridView dtgv)
{
    dtgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
    dtgv.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True;  
    int alturaTotalDatagrid = 0;
    foreach (DataGridViewRow row in dtgv.Rows)
    {
        alturaTotalDatagrid += row.Height;
    }

    TableLayoutRowStyleCollection styles =
    tlp.RowStyles;
    styles[indiceRowPanel].SizeType = SizeType.Absolute;

    styles[indiceRowPanel].Height = alturaTotalDatagrid;
    dtgv.Dock = DockStyle.Fill;
}

如果该代码片段位于 form_load 事件中,这将无法正常工作。

如果我将该代码放在一个按钮中,一旦加载表单并按下按钮,它就会完美运行。

我在 form_Show 事件中添加了该代码,但它与 form_load 发生的相同。

考虑到我使用的是:DataGridViewAutoSizeRowsMo​​de.AllCells,所以默认高度(22 像素)是不正确的。 一旦datagridview有DataSource,我必须得到每行的结果高度。

我想在不按下按钮的情况下执行该操作(代码片段),就在表单正在加载或显示时。

提前致谢。

非常感谢吉米。 我在运行时做到了(在加载表单期间,它可以工作)

DataGridView 的 AutoSize 和 RowPanel 的 AutoSize。

面板末端的“行”间隙

但是,如果你看附图,似乎DatagridView并没有在RowPanel的末尾结束,有一点差距。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM