[英]Fit Row of TableLayoutPanel if this is the container of a DataGridView
我有一个带有 TabPage 控件的表单。
正如您在附图中看到的那样,每个 TabPage 都有一个 Tablelayoutpanel。
Tablelayoutpanel 具有AutoScroll = True
(我通过代码禁用水平滚动)。
表格布局面板大小为1209x372
像素。
我的 Tablelayoutpanel 有 1 列和 6 行。
第一行和第三行里面有一个标签(标题)。
第二和第四行包含一个 DataGridView。
带有标签的行的“绝对”大小为21
像素。
问题在于承载 DataGridView 控件的面板的高度。
我尝试将SizeType
设置为Automatic
或Percentage
,但是在设置 DataSource 时,面板不会调整为 DataGridViews 的大小。
如果我为每个面板设置一个绝对大小,它工作得很好,但是我必须尝试几个像素大小。 我手动完成。
我认为在这种情况下“自动”或“百分比”没有意义的原因是因为 DataGridViews 的高度可能大于 TablelayoutPanel 控件的高度。
Datagridviews 总是有AutoScroll = False
。
我读过这是优先事项:
当 TableLayoutPanel 控件排列其行时,它按以下顺序为每个 RowStyle 分配优先级:
首先考虑 RowStyle 设置为 Absolute 的行并为其分配固定高度。
RowStyle 设置为 AutoSize 的行具有其内容的大小。
剩余空间在 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 发生的相同。
考虑到我使用的是:DataGridViewAutoSizeRowsMode.AllCells,所以默认高度(22 像素)是不正确的。 一旦datagridview有DataSource,我必须得到每行的结果高度。
我想在不按下按钮的情况下执行该操作(代码片段),就在表单正在加载或显示时。
提前致谢。
非常感谢吉米。 我在运行时做到了(在加载表单期间,它可以工作)
DataGridView 的 AutoSize 和 RowPanel 的 AutoSize。
但是,如果你看附图,似乎DatagridView并没有在RowPanel的末尾结束,有一点差距。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.