【问题标题】:Autoresize gridview columns header according to their data根据数据自动调整gridview列标题
【发布时间】:2023-04-06 21:24:01
【问题描述】:

如何根据数据自动调整 gridview 上每个数据列标题的大小,并且它应该适合屏幕而不使用滚动条来查看网格中的剩余数据?这是我的示例代码..

Xaml:

<telerik:GridViewDataColumn Header="First Name" Width="*" DataMemberBinding="{Binding FirstName}" />
                <telerik:GridViewDataColumn Header="Last Name" Width="*" DataMemberBinding="{Binding LastName}" />
                <telerik:GridViewDataColumn Header="Middle Name" Width="*" DataMemberBinding="{Binding MiddleName}"  />
                <telerik:GridViewDataColumn Header="Registration Day" Width="*" DataMemberBinding="{Binding RegistrationDay, StringFormat={}{0:dd/MM/yyyy}}" />
                <telerik:GridViewDynamicHyperlinkColumn Header="Email" Width="*" DataMemberBinding="{Binding Email}" />
                <telerik:GridViewDataColumn Header="Password" Width="*" DataMemberBinding="{Binding Access}" />

希望你能帮助我。谢谢!

【问题讨论】:

  • 你的意思是在宽度上平均分配空间吗?或者您希望列根据列中的数据调整大小?
  • 根据列中的数据调整大小。而且,行中的数据,如果它超出我输入的文本,而不是包装文本,我想显示“....”类似的东西。
  • 还有一个关于网格的后续问题,每当我双击整行时,它都会显示一个对话框。而不是点击我的编辑按钮..这可能吗?
  • 列有最大尺寸吗? ... 需要它。其次双击行为确实是可能的。
  • @pushpraj 是的,他们有大小。在我的 xaml 中,我只是在每个标题中添加了“*”。如果每列的文本超过,它将只是这个'...'。你能帮我弄清楚吗?

标签: wpf xaml gridview datacolumn


【解决方案1】:

这是一个示例,显示了问题中大部分要点的答案

<DataGrid>
    <DataGrid.Resources>
        <Style TargetType="TextBlock"
               x:Key="trimStyle">
            <Setter Property="TextTrimming"
                    Value="CharacterEllipsis" />
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Resize to header width"
                            Width="SizeToHeader"
                            Binding="{Binding}"
                            ElementStyle="{StaticResource trimStyle}" />
        <DataGridTextColumn Header="Resize to cell content"
                            Width="SizeToCells"
                            Binding="{Binding}" />
        <DataGridTextColumn Header="Resize to header &amp; cell content"
                            Width="Auto"
                            Binding="{Binding}" />
        <DataGridTextColumn Header="Distribute the remaining space"
                            Width="Auto"
                            Binding="{Binding}"
                            ElementStyle="{StaticResource trimStyle}" />
    </DataGrid.Columns>
    <sys:String>a string which is long</sys:String>
    <sys:String>a string which is long, a really long string</sys:String>
    <sys:String>another string which is long</sys:String>
    <sys:String>another string which is long, a really long string</sys:String>
</DataGrid>

结果

如您所见,我们几乎没有确定列宽的列大小调整模式。对于长文本上的省略号 ...,我为 TextBlock 定义了一种样式,启用了 TextTrimming 选项,并在所需列中使用了与 ElementStyle 相同的样式

有关数据网格大小选项的详细信息,请参阅 Sizing Options in the DataGrid Control

该示例基于DataGrid,但您似乎正在使用远程控制,但我相信它会以类似的方式应用于远程控制。我没有 Teleric 控件,所以我可能不会举一个相同的例子。

【讨论】:

  • 不支持telerik。但是,我对您给出的示例有所了解。另一件事,由于我使用了textrimming,当我将鼠标悬停在gridview中的单元格上时,是否有可能查看它?
  • 你可以在这里使用工具提示,所以也许在文本块的样式中添加&lt;Setter Property="ToolTip" Value="{Binding}" /&gt;&lt;Setter Property="ToolTip" Value="{Binding Text, RelativeSource={RelativeSource Self}}" /&gt; 就可以了。
  • 它不起作用..我认为它不会悬停。也许当您单击单元格时,工具提示将显示的时间..
猜你喜欢
  • 2014-04-22
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
相关资源
最近更新 更多