【问题标题】:Setting max autogenerate width on autogenerated columns in a datagrid在数据网格中的自动生成列上设置最大自动生成宽度
【发布时间】:2011-11-08 11:32:50
【问题描述】:

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

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

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

我也尝试连接到 AutoGeneratedColumns,但由于尚未加载行,ActualWidth 属性仅代表我设置的 MinWidth。数据网格完成加载其初始行集后是否会触发事件?

【问题讨论】:

    标签: c# wpf wpfdatagrid


    【解决方案1】:

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

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

    这样的事情可能会奏效:

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

    【讨论】:

    • 我打算在这里发表讽刺的评论,但后来我意识到与我的想法相反,DataGrid 的 Loaded 事件在初始行全部加载后触发。所以这将完美地工作毕竟,我只是在连接错误的事件。
    • @JHunz 很高兴听到这对您有用。无论如何,请随意发表讽刺评论。 :D
    【解决方案2】:

    根据文档,在单个 DataGridColumn 上设置的 Width 属性优先于 ColumnWidth 属性。您也许可以在 AutoGeneratedColumns 事件中迭代 DataGridColumns 并设置单独的宽度并让它们保持不变。

    【讨论】:

      【解决方案3】:

      我需要稍微修改 rtalbot 的代码以使其适用于我的 WPF/.net 4.5 项目...实际宽度和数据网格长度:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-05
        • 2017-06-26
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多