在数据网格中动态创建列

时间:2009-02-24 23:36:36

标签: silverlight

我正在尝试创建一个包含可变数量的列和行的数据网格。我可以创建列,但我不知道如何插入内容。

_dataGrid.Columns.Add(new DataGridTextColumn { Header = "Column 0",
                                                            Binding = new Binding("0")

                                                            }
                                  );

我想要在字符串[,]中添加所有数据。我不明白如何准备一个实现IEnumerable的数据结构,以便我可以设置

_dataGrid.ItemsSource = GenerateData();//I'd expect to return a Dictionary["0"]=List<string>(){"1","2","3"} to bind to but it doesn't work

如果我想包含一个包含“1”,“2”,“3”的列,我需要从GenerateData返回的数据结构是什么?

提前致谢。

3 个答案:

答案 0 :(得分:1)

ItemSource可以是任何东西......我在下面展示了一个匿名类型的数组,但如果你想要双向数据绑定(匿名类型生成单向绑定),你必须使用命名类型

grid.Columns.Add(new DataGridTextColumn { 
    Header = "Foo",
    Binding = new Binding("Foo")
});

grid.Columns.Add(new DataGridTextColumn { 
    Header = "Bar",
    Binding = new Binding("Bar")
});

grid.ItemsSource = new [] {
   new { Foo = "asdf", Bar = "asdf" },
   new { Foo = "asdf", Bar = "asdf" },
   new { Foo = "asdf", Bar = "asdf" }
}

答案 1 :(得分:0)

昨晚我打了这个,我想手动将内容添加到不同的行和单元格等。

您可以通过以下方式进行编程:

Grid.SetRow(myUserControl, 1);
Grid.SetColumn(myUserControl, 1);

myGrid.Children.Add(myUserControl);

它完全绕过了数据绑定模型,但有时这正是你所需要的。

答案 2 :(得分:0)

在最后的分析中,ItemsSource只需要是一个实现IEnumerable的对象。构成集合的对象必须具有与您在列上设置的绑定相匹配的属性。 DataTable可能是最自然的入门之地。