簡體   English   中英

如何在C#中動態分配數據網格的標頭?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM