带绑定的C#数据网格问题

带绑定的C#数据网格问题,c#,wpf,datagrid,binding,C#,Wpf,Datagrid,Binding,这是我在datagrid的代码隐藏中的代码。我在wpf工作 现在问题出在哪里:我只得到一行但有许多重复的列标题(使用正确的绑定),但正如您已经理解的,我不希望它们彼此相邻,而是在彼此下面。例如: 不是这样的 EditVariationWindowModel edit = (EditVariationWindowModel)this.DataContext; var datagrid = dataGrid3; foreach (Variation varia

这是我在datagrid的代码隐藏中的代码。我在wpf工作

现在问题出在哪里:我只得到一行但有许多重复的列标题(使用正确的绑定),但正如您已经理解的,我不希望它们彼此相邻,而是在彼此下面。例如:

不是这样的

EditVariationWindowModel edit = (EditVariationWindowModel)this.DataContext;

        var datagrid = dataGrid3;



        foreach (Variation variation in edit.SelQuestion.Variations)
        {
            foreach (var parameter in variation.QuestionParameters)
            {
                var binding = new Binding(parameter.Value);
                var column = new DataGridTextColumn();
                column.Header = parameter.Key.Name;
                column.Binding = binding;
                datagrid.Columns.Add(column);

            }
        }
但是


有人知道我如何解决这个问题吗?

您正在为每一行添加一个列定义。。。WTF

这里有一个不错的教程

干杯。基思


编辑:

试一试

要定义网格列。。。见:


然后(作为一个单独的步骤)通过迭代变量填充datagrid。。。或者更好的方法是阅读上面链接的文章,将网格绑定到集合中。不需要乱定义列,也不需要在每一行中循环。。。网格可以自动完成所有这些操作。

您必须首先添加所有列,然后在添加数据时选择它们

您要做的是添加一个带有新列的绑定

编辑:

当我必须手动添加行时,我通常会执行以下操作:

1.-将DataColumn添加到DataTable,将ColumnStyle添加到DataGrid,如下所示:

foreach (var parameter in edit.SelQuestion.Variations.First().QuestionParameters)
2.-将映射名称和要显示的名称分配给dataGrid的ColumnStyles和DataTable的Columns:

DataColumn fNameColumn8 = new DataColumn();
fNameColumn8.DataType = System.Type.GetType("System.String");
m_dataTable.Columns.Add(fNameColumn8);

ColumnStyle myStyleColumn8 = new ColumnStyle(7);
myStyleColumn8.TextAlign = ContentAlignment.TopRight;

DataGridTableStyle dataGridTableStyle = new DataGridTableStyle();
dataGridTableStyle.MappingName = MAPPINGNAME;
dataGridTableStyle.GridColumnStyles.Add(myStyleColumn8);

this.dataGrid.TableStyles.Add(dataGridTableStyle);
3.-在DataGrid的ColumnStyles中指定列的宽度:

m_dataTable.Columns[8].ColumnName = this.m_strHeader;

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).MappingName = this.m_strHeader;

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).HeaderText = this.m_strHeader;
4.-填写以下行:

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).Width = 20;

edit.SelQuestion.variances中的
variances变量是否编译?我以为
var
在C#中是一个保留字?即使它是“合法的”,我也不会使用它,因为它令人困惑,我会将它重命名为
variance
。是的,它编译。。。但是好的,我会改变它,但这里我有一个问题,我不能设置我的ItemsSource,因为我需要每个变量的list questionparameters。。。因此,当我将itemssource设置为SelQuestion.Variations时,我无法访问我的属性:Questionparameters of Variation。还是有办法?但你是怎么做到的?我知道如何制作我的专栏。。但是我不知道如何为每个问题参数添加新行使用DataTable作为DataGrid.DataSource,您可以((DataTable)DataGrid.DataSource).NewRow()为您提供一个新的DataRow,您可以直接添加到DataSource,这就是您必须做的。我如何实现这一点?那我先做专栏?那么我该怎么办呢?我发布了一个单独的示例,在插入行之前,必须初始化每一列。
m_dataTable.Columns[8].ColumnName = this.m_strHeader;

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).MappingName = this.m_strHeader;

((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).HeaderText = this.m_strHeader;
((DataGridTextBoxColumn)this.dataGrid.TableStyles[0].GridColumnStyles[8]).Width = 20;
DataRow dataRow = this.m_dataTable.NewRow();

dataRow[this.m_strHeader] = "DATA";

this.m_dataTable.Rows.Add(dataRow);