【问题标题】:Set Column Header Name in XAML- WPF在 XAML-WPF 中设置列​​标题名称
【发布时间】:2012-12-06 19:55:08
【问题描述】:

我想在绑定到数据库的 WPF 数据网格中设置用户定义的列 Header。

为了显示 ServerID, EventlogID 我想在列标题中显示为 Server, Event Log。

这些我都试过了……

 <DataGrid x:Name="dataGrid1" ItemsSource="{Binding}" AutoGenerateColumns="True" >
     <DataGrid.Columns>
        <DataGridTextColumn Header="Server" Width="Auto" IsReadOnly="True"  Binding="{Binding Path=ServerID}" />
            <DataGridTextColumn Header="Event Log" Width="Auto" IsReadOnly="True"  Binding="{Binding Path=EventLogID}" />
      </DataGrid.Columns>
   </DataGrid>

这很好用,它改变了列标题,数据也显示出来了。

但我的问题是,它作为 XAML 的前两列标题和 DB 的其他两列标题显示两次。

  |Server|Event Log|ServerID|EventLogID|

如何克服这种复制? 请帮忙!

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案1】:

    那是因为你把AutoGenerateColumns="True"去掉了,就不会再有重复了。

    您目前正在自动添加一次列,然后手动添加第二次!

    【讨论】:

    • 我做到了 :) 我的意思是我错过了基本的 :-/
    【解决方案2】:

    XAML:将AutoGeneratingColumn="OnAutoGeneratingColumn" 事件添加到DataGrid 事件:

    <DataGrid x:Name="dataGrid1"  ItemsSource="{Binding YourItems}" AutoGenerateColumns="True" AutoGeneratingColumn="OnAutoGeneratingColumn">
    

    代码隐藏:添加事件处理程序如下:

    private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
      switch (e.Column.Header)
      {
        case "ServerID":
          e.Column.Header = "Server";
          break;
        case "EventID":
          e.Column.Header = "Event";
          break;   
        default:
          e.Cancel = true;
          break;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2014-07-06
      • 2016-04-23
      • 1970-01-01
      相关资源
      最近更新 更多