1

我已经搜索了一段时间,并且有很多关于这个主题的帖子,但似乎没有一个能给我正确的答案。

我在表单上创建了一个数据网格,如下所示:

 <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。

有没有一种简单的方法可以动态地做到这一点?我想为多个列执行此操作。

4

1 回答 1

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。我希望这将有所帮助。

于 2012-07-31T04:42:54.637 回答