2011-09-01 41 views
0

我有一个DataGrid,我绑定到由SQL查询填充的DataTable。我希望这个网格的列可以自动生成,其宽度可以达到一定数量的像素,但如果用户希望它更宽,仍然可以扩展。目前DataGrid上的ColumnWidth属性被设置为SizeToHeader(它看起来并不像描述的那样工作,因为它仍然按照单元格内容进行调整)。在数据网格中自动生成的列设置最大自动生成宽度

有什么办法可以设置最大代宽度?

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

我也尝试过钩入AutoGeneratedColumns,但由于行尚未加载,ActualWidth属性仅代表我设置的MinWidth。 DataGrid完成加载其初始行集后会触发事件吗?

回答

0

遍历列集合并获取每列的宽度。如果宽度大于阈值,则将其设置为最大宽度。控件初始化后,您会想要这样做。

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

像这样的东西可能工作:

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

我要在这里做一个讽刺性的评论,但后来我意识到,相反的是我原以为,DataGrid的加载事件触发在最初的行被全部加载之后。因此,这将完美地工作,我只是接错了事件。 – JHunz

+0

@Jhunz很高兴听到这对你有用。无论如何,请随时发表讽刺意见。 :d – rtalbot

0

从文档中单个DataGridColumn上设置的Width属性优先于ColumnWidth属性。您可能可以遍历AutoGeneratedColumns事件中的DataGridColumns,并设置各个宽度并让它们保持不变。

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); 
      } 
     }