列标题上的“缓冲”宽度?

时间:2015-03-23 05:30:56

标签: c# winforms datagridview

我有一个小循环函数,可根据Column Header文本的宽度调整列的大小:

var columns = VView.gridViewCblID.Columns;

foreach (DataGridViewColumn clm in columns)
{
    VView.lblDummy.Text = clm.HeaderText;
    if (clm.Width > VView.lblDummy.Width && clm.Width <= 100)
    {
        clm.Width = VView.lblDummy.Width;
    }
}

然而,由于&#34;缓冲&#34;它会自动应用于Column HeaderText的左侧,这些列会得到一个&#34;聚束&#34;外观:

enter image description here

该垫子的实际宽度是多少,所以我可以将它应用于该方法?即。

clm.Width = VView.lblDummy.Width + (cushion *2);

1 个答案:

答案 0 :(得分:3)

可以使用AutoSizeColumnsMode为您完成工作,然后将调整大小模式设置回手动。 E.g。

DataGridView dgv = new DataGridView() { Dock = DockStyle.Fill };
dgv.Columns.Add("Cable Number", "Cable Number");
dgv.Columns.Add("Type", "Type");
dgv.Columns.Add("Length", "Length");

dgv.Columns["Type"].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader;

Form f = new Form();
f.Controls.Add(dgv);
dgv.HandleCreated += delegate {
    dgv.BeginInvoke((Action) delegate {
        var c = dgv.Columns["Type"];
        int w = c.Width;
        c.Width = w; // set current width, otherwise DGV reverts to previous 100 width
        c.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    });
};