在数据网格中的自动生成列上设置最大自动生成宽度

时间:2011-09-01 14:48:28

标签: c# wpf wpfdatagrid

我有一个DataGrid,我绑定到DataTable,它被SQL查询填充。我希望自动生成此网格的列,其宽度可达一定数量的像素,但如果用户希望它更宽,则仍可由用户扩展。目前,datagrid上的ColumnWidth属性设置为SizeToHeader(它似乎无论如何都不起作用,因为它仍在调整单元格内容。)

有没有办法设置最大生成宽度?

设置MaxColumnWidth可防止用户调整大于该宽度的列的大小。

我也试过挂钩到AutoGeneratedColumns,但由于没有加载行,所以ActualWidth属性只代表我设置的MinWidth。一旦datagrid完成加载其初始行集,是否会触发事件?

3 个答案:

答案 0 :(得分:1)

迭代列集合并获取每列的宽度。如果宽度大于阈值,则将其设置为最大宽度。您可能希望在控件初始化后执行此操作。

这篇文章可能会有帮助:http://support.microsoft.com/kb/812422

这样的事情可能有用:

foreach(var c in grid.Columns)
{
    var width = c.Width;
    if(width > threshold)
    {
        c.Width = threshold;
    }
}

答案 1 :(得分:0)

从文档中,在单个DataGridColumn上设置的Width属性优先于ColumnWidth属性。您可以迭代AutoGeneratedColumns事件中的DataGridColumns并设置单独的宽度并让它们坚持下去。

答案 2 :(得分:0)

我需要稍微修改rtalbot的代码,以使其适用于我的WPF / .net 4.5项目... actualwidth和datagridlength:

        // fix extra wide columns
        foreach (var c in dgMain.Columns)
        {
            var width = c.ActualWidth;
            if (width > 200)
            {
                c.Width = new DataGridLength(200);
            }
        }