[英]How do you dynamically assign a datagrid's headers in c#?
如何在C#中動態分配數據網格的標頭?
考慮以下XAML:
<data:DataGrid x:Name="dataGrid" AutoGenerateColumns="False" Margin="1,1,1,1" >
<data:DataGrid.Columns>
<data:DataGridTextColumn
Header="Substantive"
Binding="{Binding Path=Substantive}"
IsReadOnly="True"
/>
<data:DataGridTextColumn
Header=""
Binding="{Binding Path=Month[0]}"
IsReadOnly="True"
/>
<data:DataGridTextColumn
Header=""
Binding="{Binding Path=Month[1]}"
IsReadOnly="True"
/>
</data:DataGrid.Columns>
</data:DataGrid>
在C#代碼中,如何定義空白的標頭?
好吧,好吧,如果沒人知道,讓我們提出另一個問題。 如何用C#代碼而不是XAML從頭開始創建DataGrid?
您可以這樣向datagrid添加列(對於textcolumn):
text2 = new DataGridTextColumn();
bind = new System.Windows.Data.Binding("ValueList");
bind.ConverterParameter = i;
bind.Converter = new IndexConverter();
text2.Binding = bind;
text2.Header = "Header";
text2.MaxWidth = 100;
....
datagrid1.Columns.Add(text2);
您可以通過以下方式訪問現有列:
((DataGridTextColumn)datagrid1.Columns[i]).Header = "Header";
不知道您到底需要什么,但是:
在解決您的原始問題時,在我看來,價值轉換器可以在這里完成工作。
public class MyConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// Do stuff with parameter, for example:-
int month = Convert.ChangeType(parameter, typeof(int), culture);
return cultrue.DateTimeFormat.GetAbbreviatedMonthName(month + 1);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后在您的xaml中使用它:
<UserControl.Resources>
<local:MyConverter x:Key="myconv" />
</UserControl.Resources>
...
<data:DataGrid x:Name="dataGrid" AutoGenerateColumns="False" Margin="1,1,1,1" >
<data:DataGrid.Columns>
<data:DataGridTextColumn
Header="Substantive"
Binding="{Binding Path=Substantive}"
IsReadOnly="True"
/>
<data:DataGridTextColumn
Header="{Binding Converter={StaticResource myconv} ConverterParameter=0}"
Binding="{Binding Path=Month[0]}"
IsReadOnly="True"
/>
<data:DataGridTextColumn
Header="{Binding Converter={StaticResource myconv} ConverterParameter=1}"
Binding="{Binding Path=Month[1]}"
IsReadOnly="True"
/>
</data:DataGrid.Columns>
</data:DataGrid>
當您使用dataGrid.ItemsSource時,您的DataGrid標頭將分配給用作ItemsSource的List中的變量名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.