繁体   English   中英

WPF Datagrid行标题绑定-可观察的集合

[英]WPF datagrid row header binding - Observable collection

我已经使用datatable构建了一个datagrid,结果显示正确。 现在,我打算将ROWHEADER添加到数据网格中。 我填充了一个observable collection<string>并在XAML中将其用作行标题数据模板路径。 仍然没有出现。 有人可以建议问题出在哪里吗?

public ObservableCollection<string> Rownameheaders { get; set; } //in the main .cs

//xaml.cs
public void Form1_load(object sender, EventArgs e)
{
    WF_CRM_RPluginModel model = DataContext as WF_CRM_RPluginModel;
    var hello1 =  new ObservableCollection<String>();

    for(int i=0; i< model.prodwells.Count;i++)
    {
        hello1.Add(model.prodwells[i]);
    }

    model.Rownameheaders = hello1;

    List<double[]> list = new List<double[]>();
    for (int i = 0; i < model.RowFijtable; i++)
    {
        double[] rowdata = new double[model.ColFijtable];
        for (int j = 0; j < model.ColFijtable; j++)
        {
            rowdata[j] = model.TauTable[i, j];
        }

        list.Add(rowdata);
    }

    DataTable table = ConvertListToDataTable(list);

    dataGridView1.ItemsSource = table.AsDataView();  
}

private DataTable ConvertListToDataTable(List<double[]> list)
{
    DataTable table = new DataTable();
    WF_CRM_RPluginModel model = DataContext as WF_CRM_RPluginModel;
    // Get max columns.
    int columns = 0;
    foreach (var array in list)
    {
        if (array.Length > columns)
        {
            columns = array.Length;
        }
    }

    // Add columns.
    for (int i = 0; i < columns; i++)
    {
        // Provide default column name & data type
        table.Columns.Add(model.injwells[i], typeof(double));
    }

    // Add rows.
    foreach (var array in list)
    {
        // assign each array element to the appropriate column
        var row = table.NewRow();

        for (int i = 0; i < array.Length; ++i)
            row.SetField(i, array[i]);

        table.Rows.Add(row);
    }

    return table;
}

XAML:

<DataGrid Name="dataGridView1" Loaded="Form1_load" ItemsSource="{Binding}" AutoGenerateColumns="True"                                          AlternatingRowBackground="Gainsboro" CanUserSortColumns="False">
    <DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Rownameheaders}"/>
        </DataTemplate>
    </DataGrid.RowHeaderTemplate> 
</DataGrid>

这是我得到的结果,但是没有行标题...

在此处输入图片说明

我最终添加了一个带有值的新列,并将数据表中的列位置设置为0。 下面是更新的代码:

private DataTable ConvertListToDataTable(List<double[]> list)
{
    DataTable table = new DataTable();
    WF_CRM_RPluginModel model = DataContext as WF_CRM_RPluginModel;
    // Get max columns.
    int columns = 0;
    foreach (var array in list)
    {
        if (array.Length > columns)
        {
            columns = array.Length;
        }
    }

   // Add columns.
    for (int i = 0; i < columns; i++)
    {
        // Provide default column name & data type
        table.Columns.Add(model.injwells[i], typeof(double));

    }

    // Add rows.
    foreach (var array in list)
    {
        // assign each array element to the appropriate column
        var row = table.NewRow();
        for (int i = 0; i < array.Length; ++i)
            row.SetField(i, array[i]);
        table.Rows.Add(row);
    }

    //ADDED below part
    DataColumn newCol = new DataColumn("Prod Name", typeof(string));
    newCol.AllowDBNull = true;
    table.Columns.Add(newCol);
    newCol.SetOrdinal(0);
    int m = 0;
    foreach(DataRow row in table.Rows)
    {
        row["Prod Name"] = model.prodwells[m];
        m = m + 1;
    }

    return table;
}

希望它也能帮助别人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM