none
WPF DataGrid 自动换行 RRS feed

  • 问题

  • new SqlDataAdapter().Fill(dataTable);
    System.Windows.Controls.DataGrid.ItemsSource = dataTable.DefaultView;
    通过这种方式将 DataTable 绑定到 DataGrid 中并显示,如何让单元格中,内容超出列宽的文本自动换行。
    2019年6月8日 14:42

答案

  • 那就用 event 來做

      public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                var table = new DataTable();
                table.Columns.Add("Description");
                table.Columns.Add("Name");
                
                for(int i =0; i < 10; i ++)
                {
                    var row = table.NewRow();
                    row[0] = $"PPPPPPP {i}, KKKKKKKKKK {i}";
                    row[1] = i.ToString();
                    table.Rows.Add(row); 
                }
    
                dataGrid.ItemsSource = table.DefaultView;
            }
    
            private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
            {
                if (e.Column is DataGridTextColumn column)
                {
                    var style = new Style(typeof(TextBlock));
                    style.Setters.Add(new Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap));
                    column.ElementStyle = style;
                }
            }
        }

    <Window x:Class="WpfDataGridTextWrappingSample.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfDataGridTextWrappingSample"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
    
        <DataGrid  AutoGenerateColumns="True" x:Name="dataGrid" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" />
    </Window>


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    • 已标记为答案 ssssssh 2019年6月11日 7:30
    2019年6月10日 4:50

全部回复

  •        <DataGrid Margin="16" ItemsSource="{Binding People}" 
                      AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="姓名" Width="80" Binding="{Binding Name, Mode=TwoWay }">
                        <DataGridTextColumn.ElementStyle >
                            <Style TargetType="TextBlock" >
                                <Setter Property="Foreground" Value="Blue"/>
                                <Setter Property="TextWrapping" Value="Wrap" />
                            </Style>
                        </DataGridTextColumn.ElementStyle>                   
                        <DataGridTextColumn.EditingElementStyle >
                            <Style TargetType="TextBox" >
                                <Setter Property="Foreground" Value="Red"/>
                                <Setter Property="TextWrapping" Value="Wrap" />
                            </Style>
                        </DataGridTextColumn.EditingElementStyle>                    
                    </DataGridTextColumn>

    自訂 Element Style 類似上方的 xaml


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2019年6月8日 19:24
  • 你好,DataTable 中的内容是未知的,无法提前写好一个类,及在 xaml 中写好 DataGridTextColumn。

    如果是这种方式,我是否需要这样做:

            在后台遍历 DataTable,自动创建 DataGridTextColumn 并添加到 DataGrid.Columns.Items 中。

    2019年6月9日 4:22
  • 那就用 event 來做

      public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                var table = new DataTable();
                table.Columns.Add("Description");
                table.Columns.Add("Name");
                
                for(int i =0; i < 10; i ++)
                {
                    var row = table.NewRow();
                    row[0] = $"PPPPPPP {i}, KKKKKKKKKK {i}";
                    row[1] = i.ToString();
                    table.Rows.Add(row); 
                }
    
                dataGrid.ItemsSource = table.DefaultView;
            }
    
            private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
            {
                if (e.Column is DataGridTextColumn column)
                {
                    var style = new Style(typeof(TextBlock));
                    style.Setters.Add(new Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap));
                    column.ElementStyle = style;
                }
            }
        }

    <Window x:Class="WpfDataGridTextWrappingSample.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfDataGridTextWrappingSample"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
    
        <DataGrid  AutoGenerateColumns="True" x:Name="dataGrid" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" />
    </Window>


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    • 已标记为答案 ssssssh 2019年6月11日 7:30
    2019年6月10日 4:50