【问题标题】:C# datagrid problem with bindingC# datagrid 绑定问题
【发布时间】:2011-05-03 07:46:01
【问题描述】:
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 工作。

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

不是这样的

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

但是

 header1 | header2
 string1 | string2
 string1 | string2

有谁知道我该如何解决这个问题?

【问题讨论】:

  • Variation var in edit.SelQuestion.Variations 甚至可以编译吗?我以为var 是 C# 中的保留字?即使它是“合法的”,我也不会使用它,因为它令人困惑,我会将其重命名为 variation
  • 是的,它可以编译...但是好的,我会改变它

标签: c# wpf datagrid binding


【解决方案1】:

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

您所做的是添加与新列的绑定。

编辑:

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

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.- 将映射名称和名称分配给dataGrid的ColumnStyles和DataTable的Columns:

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

【讨论】:

  • 但是你是怎么做到的呢?我知道如何制作我的专栏。但我不知道如何为每个问题参数添加新行
  • 使用 DataTable 作为 DataGrid.DataSource,您可以执行 ((DataTable)dataGrid.DataSource).NewRow() 为您提供一个可以添加到 DataSourceDirectly 的新 DataRow,这就是您所拥有的去做。
  • 我该如何实现呢?所以首先我做我的专栏?那我该怎么办?
  • 我发布了一个单独的示例,您必须在插入行之前初始化每一列。
【解决方案2】:

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

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

干杯。基思。


编辑:

试试

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

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

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

【讨论】:

  • 但是在这里我有一个问题是我无法设置我的 ItemsSource,因为我需要每个变体的列表问题参数......所以当我将我的 itemssource 设置为 SelQuestion.Variations 时,我不能到达我的财产:变化的问题参数。或者有什么办法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2011-06-12
  • 2011-08-15
  • 2011-04-10
相关资源
最近更新 更多