我有一个可编辑的WPF DataGrid绑定到DataTable,并且使用ADO.NET逐页加载从SQL Server加载的数据。有一些类型为nvarchar(MAX)的文本字段。因此,用户应该能够在DataGrid中编辑和保存文本。所有这些都适用于普通的DataGridTextColumns。但是对于用户来说非常不方便,因此我希望在文本列中显示2行,并使用垂直滚动条滚动剩余的行。
我尝试了DataGridTextColumn和DataGridTemplateColumn。
使用DataGridTemplateColumn它显示了我们想要的方式,但是当它编辑时它没有出现在DataSet中有变化。 (这是在浏览页面时警告用户所必需的)因此它不会保存更改。
<DataGridTemplateColumn Header="Full Description" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="dgFullDescription"
Text="{Binding FullDescription, Mode=TwoWay}"
TextWrapping="WrapWithOverflow" Height="36"
VerticalScrollBarVisibility="Visible" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
另一方面,DataGridTextColumn会保存更改,但无法显示滚动条。如果我设置了文本换行,那么如果它有更多的字符,它会显示超过2行,因此行高不一致。
<DataGridTextColumn Header="ShortDescription" Width="*"
Binding="{Binding ShortDescription, Mode=TwoWay}" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility"
Value="Visible" />
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="HorizontalScrollBarVisibility"
Value="Visible" />
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
如何在WPF DataGrid中设置具有固定行高的可编辑文本列中的垂直滚动条?
答案 0 :(得分:0)
最后,我能够使用DataGridTemplateColumn。垂直滚动条和固定高度都适用于它。感谢@Noctis提供有关身高的建议。要使对DataGridTemplateColumn内的文本框所做的更改在DataSet更改中可用以进行更新,我必须添加 UpdateSourceTrigger =引发LostFocus 文本绑定。最终代码如下:
<DataGridTemplateColumn Header="Full Description" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="dgFullDescription"
Text="{Binding FullDescription, Mode=TwoWay, UpdateSourceTrigger=LostFocus }"
TextWrapping="WrapWithOverflow" Height="36"
VerticalScrollBarVisibility="Visible" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
感谢。