Ответ 1
Это потому, что вы оставили AutoGenerateColumns="True"
удалить его, и больше не будет дублирования.
В настоящее время вы добавляете столбцы один раз, автоматически, а затем второй раз вручную!
Я хотел бы задать определяемый пользователем заголовок столбца в datagrid WPF, привязанный к базе данных.
для отображения 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 и других двух столбцов заголовка из базы данных.
|Server|Event Log|ServerID|EventLogID|
как преодолеть эту репликацию? Пожалуйста, помогите!
Это потому, что вы оставили AutoGenerateColumns="True"
удалить его, и больше не будет дублирования.
В настоящее время вы добавляете столбцы один раз, автоматически, а затем второй раз вручную!
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;
}
}