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
任何人都知道如何解决这个问题?
答案 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);