簡體   English   中英

如何在 c# wpf 中動態創建 datagridview

[英]how to create a datagridview dynamically in c# wpf

如何在 C# 中動態創建 DataGridView? 你能舉個例子嗎?

我有后綴列表和前綴列表后綴是:BA1,BA2,BA3,BA4,BA5,BA6,前綴是:Parameter1,parameter2,parameter3,parameter4。

我還有列出參數

public class Parameter
{
public string Prefix{get;set;}
public string Suffix{get;set;}
public string Value {get;set;}
}

public class Mother 
{
    public string List<Parameter> parameters{get;set;} = new List<Parameter>();
}

參數列表包含:

"Parameter1" "BA1" "55"
"Parameter1" "BA2" "58"
"Parameter1" "BA3" "1"
"Parameter1" "BA4" "77"
"Parameter1" "BA5" "7889"
"Parameter1" "BA6" "100"
"Parameter2" "BA1" "7"
"Parameter2" "BA2" "44"
..
..
..
..

我想顯示一個 DataGrid

Name            BA1  BA2  BA3   BA4   BA5   BA6

Parameter1      55   58    1     77   7889    100
Parameter2      7    44 
Parameter3
Parameter4

我的 XAML 是:

DataTemplate DataType="{x:Type local:Mother}"><DataGrid Name="Grid" AutoGenerateColumns ="True" ItemsSource="{Binding Parameters}"></DataGrid>
 </DataTemplate>

你可以像這樣構建一個DataTable

    public MainWindow()
    {
        InitializeComponent();

        var mother = new Mother();
        mother.Parameters.Add(new Parameter("Parameter1", "BA1", "55"));
        mother.Parameters.Add(new Parameter("Parameter1", "BA2", "58"));
        mother.Parameters.Add(new Parameter("Parameter1", "BA3", "1"));
        mother.Parameters.Add(new Parameter("Parameter1", "BA4", "77"));
        mother.Parameters.Add(new Parameter("Parameter1", "BA5", "7889"));
        mother.Parameters.Add(new Parameter("Parameter1", "BA6", "100"));
        mother.Parameters.Add(new Parameter("Parameter2", "BA1", "7"));
        mother.Parameters.Add(new Parameter("Parameter2", "BA2", "44"));

        DataGrid.ItemsSource = ConvertToDataTable(mother).DefaultView;
    }

    private static DataTable ConvertToDataTable(Mother mother)
    {
        var dataTable = new DataTable();
        dataTable.Columns.Add("Name");

        foreach (var column in mother.Parameters
                     .OrderBy(x => x.Suffix)
                     .GroupBy(x => x.Suffix))
        {
            dataTable.Columns.Add(column.First().Suffix);
        }

        foreach (var rowGroup in mother.Parameters
                     .OrderBy(x => x.Prefix)
                     .GroupBy(x => x.Prefix))
        {
            var dataRow = dataTable.NewRow();
            dataRow["Name"] = rowGroup.First().Prefix;

            foreach (var item in rowGroup)
            {
                dataRow[item.Suffix] = item.Value;
            }

            dataTable.Rows.Add(dataRow);
        }

        return dataTable;
    }
}

public class Parameter
{
    public Parameter(string prefix, string suffix, string value)
    {
        Prefix = prefix;
        Suffix = suffix;
        Value = value;
    }

    public string Prefix { get; set; }
    public string Suffix { get; set; }
    public string Value { get; set; }
}

public class Mother
{
    public Mother()
    {
        Parameters = new List<Parameter>();
    }
    public List<Parameter> Parameters { get; set; }
}

xaml:

<DataGrid x:Name="DataGrid" AutoGenerateColumns="True" CanUserAddRows="False" CanUserDeleteRows="False" />

暫無
暫無

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

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