带绑定的C#datagrid问题

时间:2011-05-03 07:46:01

标签: c# wpf datagrid binding

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);

            }
        }

所以这是我的数据网格代码背后的代码。我在wpf工作。

现在出现了什么问题:我只得到一行但是有很多重复的列标题(使用正确的绑定)但是你已经明白了,我不希望它们彼此相邻,而是在彼此之下。例如:

不喜欢这个

header1 | header2 | header1 | header2|
string1 | string2 | string 1| string2|

 header1 | header2
 string1 | string2
 string1 | string2

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您要为每行添加列定义... WTF?

这是How to Bind a DataGrid to a Collection上的一个不错的教程。

干杯。基思。


修改

尝试

foreach (var parameter in edit.SelQuestion.Variations.First().QuestionParameters)

定义网格列...请参阅:First method

然后(作为一个单独的步骤)通过迭代变体来填充数据网格...或者更好地阅读上面链接的文章,并将网格绑定到集合。无需弄乱定义列,并循环遍历每一行......网格可以自动执行所有操作。

答案 1 :(得分:0)

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

您正在做的是使用新列添加绑定。

编辑:

当我必须手动添加行时,我通常会做的是:

1.-将DataColumn添加到DataTable和ColumnStyle到DataGrid,就像:

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);

2.-分配映射名称和名称以显示dataBrid的ColumnStyles和DataTable的列:

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;

3.-在DataGrid的ColumnStyles中指定列的宽度:

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

4.-填写行:

DataRow dataRow = this.m_dataTable.NewRow();

dataRow[this.m_strHeader] = "DATA";

this.m_dataTable.Rows.Add(dataRow);