如何在c#中动态分配datagrid的头文件?

时间:2011-08-02 01:46:43

标签: c# silverlight xaml

如何在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?

4 个答案:

答案 0 :(得分:1)

您可以将列添加到数据网格中(对于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";

答案 1 :(得分:0)

不确定你到底需要什么:

答案 2 :(得分:0)

在解决您的原始问题时,我认为值转换器可以在这里完成工作。

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>

答案 3 :(得分:0)

使用dataGrid.ItemsSource时,DataGrid标题将被分配给List中用作ItemsSource的变量名称。