如何在c#中动态地分配数据网格's头

本文关键字:网格 数据网 数据 分配 动态 | 更新日期: 2023-09-27 18:04:17

如何在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从头开始创建数据网格?

如何在c#中动态地分配数据网格's头

您可以像这样向数据网格添加列(对于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";

不知道你到底需要什么,但是:

  • 创建包括标题在内的新列,参见用c#代码代替模板XAML

  • 更改列的标题,参见http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcolumn.header%28v=VS.95%29.aspx

解决您最初的问题,在我看来,值转换器将在这里完成工作。

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中的变量名。