我正在使用DataGrid
與AutogenerateColumns
設置爲true
。所有DataGrid標題必須具有唯一的名稱 - 如何解決它
我通過DataContext
屬性將它綁定到弱類型DataTable
。
我遇到的問題是所有標題都必須具有唯一的名稱,因爲myGrid.Columns[x].Header
的值直接與底層的DataTable
(顯然,不允許有重複的列名稱)的列名相關聯。
是否有任何明智的解決方法?
我正在使用DataGrid
與AutogenerateColumns
設置爲true
。所有DataGrid標題必須具有唯一的名稱 - 如何解決它
我通過DataContext
屬性將它綁定到弱類型DataTable
。
我遇到的問題是所有標題都必須具有唯一的名稱,因爲myGrid.Columns[x].Header
的值直接與底層的DataTable
(顯然,不允許有重複的列名稱)的列名相關聯。
是否有任何明智的解決方法?
下面的代碼是未經測試...
對於DataGridHeaders改變,你就必須重寫他們的ContentTemplate。
<DataGrid.Resources>
<Style TargetType="{x:Type dg:DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource DynamicColumnHeaderTextConverter}">
<Binding BindsDirectlyToSource="True"/>
<Binding Path="ItemsSource" RelativeSource="{RelativeSource AncestorType={x:Type dg:DataGrid}}" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
在上面的代碼DynamicColumnHeaderTextConverter的轉換()方法將接收2個值
基於此返回非唯一名稱。
public class DynamicColumnHeaderTextConverter : IMultiValueConverter
{
public object Convert(object[] values, ...)
{
var columnName = (string)values[0];
var dataTable = (DataTable)values[1]; //// if you want to decide name based on some value in the DataTable.
switch(columnName)
{
case "MyColumn1" : return "MyColumn";
case "MyColumn2" : return "MyColumn";
}
return columnName;
}
}
讓我知道這是否有幫助。
謝謝!我明天會試試這個(我今天差不多完成了:))。順便說一句,我已經覆蓋'DataGridColumnHeader'' ContentTemplate',所以我只是將你提出的代碼合併。我會讓你知道 –
我試過了,但不幸的是它不起作用。我得到一個XamlParseException:「'Binding'不能在'Binding'類型的'Path'屬性上設置,'Binding'只能在DependencyObject的DependencyProperty上設置。 –
嗨Vibo,對於代碼錯誤抱歉...
您能否詳細說明您的問題? Isnt DataTable做你想做的(列名的唯一性)對嗎? –
我想在'DataGrid'中包含非唯一標題 - 顯示名稱;在UI中!不影響'DataTable'中的列名(這會導致拋出異常)。我不希望(可見)標題名稱與(邏輯)列名稱連接;但截至目前,他們是。 –