簡體   English   中英

如何動態創建DataGrid的DataGridTextColumn並將其綁定?

[英]How to create DataGridTextColumn of DataGrid dynamically and bind it?

我有兩個屬性:

  • public ObservableCollection<Object> HeaderOfDataGrid {get; set;}
  • public Observablecollection<Object> BodyOfDataGrid {get; set;}

是否可以將HeaderOfDataGrid屬性綁定到DataGridTextColumn 是的,我知道可以這樣綁定:

<DataGrid.Columns>
   <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
   <DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/>
   <DataGridTextColumn Header="Phone" Binding="{Binding Phone_Number}" />
</DataGrid.Columns>

但是, HeaderOfDataGrid屬性的“計數”等於700,我需要在DataGridTextColumnsDataGrid顯示集合HeaderOfDataGrid所有700個項目。 因此,我需要基於HeaderOfDataGrid屬性(集合)創建700個DataGridTextColumns 另外,如果HeaderOfDataGrid Count屬性為700,則BodyOfDataGrid屬性也具有相同的Count (例如700)。 因此,使用硬編碼的xaml對我來說並不方便。

我知道我可以這樣綁定:

<DataGrid ItemsSource="{Binding Path=Body, Mode=TwoWay}"/>

但這不是我想要的,因為我想重命名Header屬性中的標頭。

如何在沒有將xaml硬編碼到DataGridTextColumn情況下實現綁定和創建?

您不能同時擁有這兩種方式。 如果要重命名標題,則必須手動對其進行編碼。 否則,您會自動執行並使用它所提供的功能。

您可能可以設置樣式,其中標題綁定到基礎對象的屬性。 在這種情況下,它可能會起作用,但是您的BodyOfDataGrid必須包含Header屬性

我發現要做的是創建DataTable並將其綁定到DataGrid

XAML:

<DataGrid Name="dataGrid" />

后面的代碼:

    public MainWindow()
    {
        InitializeComponent();
        PopulateDataGrid();
    }

    DataTable employeeDataTable = new DataTable();

    private void PopulateDataGrid()
    {
        var _ds = new DataSet("Test");

        employeeDataTable = _ds.Tables.Add("DT");
        for (int i = 0; i < 10; i++)//create columns
        {   
            if(i==0)
                employeeDataTable.Columns.Add("Row");                
            employeeDataTable.Columns.Add(i.ToString());
        }
        for (int i = 0; i < 10; i++)//fill data to rows
        {
            var theRow = employeeDataTable.NewRow();
            for (int j = 0; j < 10; j++)
            {
                if (j == 0)
                {
                    theRow[j] = (i + 1);
                    continue;
                }
                if (j % 2 == 0)                    
                    theRow[j] = "a";  
                else                  
                    theRow[j] = "b";
            }
            employeeDataTable.Rows.Add(theRow);
        }
        dataGrid.ItemsSource = employeeDataTable.AsDataView();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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