我已经搜索了一段时间,这个主题上有很多帖子,但似乎都没有给我正确答案。
我在表单上创建了一个数据网格,简单如下:
<StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="860">
<DataGrid ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Name="DGI"
Height="700"
ItemsSource="{Binding}"
Background="LightGray" RowBackground="LightYellow" AlternatingRowBackground="LightBlue">
</DataGrid>
</StackPanel>
现在我按照以下方式绑定代码中的数据:
private void btnUpdateGridI_Click(object sender, RoutedEventArgs e)
{
DGI.DataContext = null;
IEnumerable<DataRow> query =
from punch in dspl.Tables[0].AsEnumerable()
where punch.Field<String>("TOS").Contains(cmbTOSI.SelectedItem.ToString()) &&
punch.Field<String>("BU").Contains(cmbBUI.SelectedItem.ToString()) &&
punch.Field<String>("CLOSED").Contains(cmbClosedI.SelectedItem.ToString()) &&
punch.Field<String>("CAT").Contains(cmbCATI.SelectedItem.ToString())
select punch;
try
{
DataTable boundTable = query.CopyToDataTable<DataRow>();
DGI.DataContext = boundTable;
lbltotalitemsI.Content = boundTable.Rows.Count.ToString() + " ITEMS";
DGI.Columns[6].MaxWidth = 350;
}
catch
{
MessageBox.Show("No data exists for the current selection.");
lbltotalitemsI.Content = "0 ITEMS";
DGI.DataContext = null;
}
}
我正在尝试将第6列中的文本换行。我能够定义它的最大宽度,但是为了包装文本,大多数在线资源都引用了在数据网格中使用TextBlock。
有一种简单的动态方法吗?我想要为多个列做这个。
答案 0 :(得分:1)
您好我们不能直接设置TextWrap,这就是提供模板的原因(模板负责外观而不影响控件的行为)。上述问题的一个简短例子是
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True">//Set your all properties as you want
<DataGrid.Columns>
<DataGridTextColumn Header="TOS" Binding="{Binding TOS}"></DataGridTextColumn>
<DataGridTextColumn Header="BU" Binding="{Binding BU}"></DataGridTextColumn>
<DataGridTextColumn Header="CLOSED" Binding="{Binding CLOSED}"></DataGridTextColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!--This is how we can set Text Wrap-->
<TextBox Text="{Binding CAT}" TextWrapping="Wrap"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
第4列是TextWrap。我希望这将有所帮助。