Infragistics XamDataGrid 可变列数问题

3
我需要能够支持一个XamDataGrid,在设计时列数不固定。例如,应用程序将运行,从服务器获取一些数据并创建一些对象。根据服务器的响应,每次运行应用程序都可能有不同数量的对象。
这是我所说的例子。假设我调用某个服务并返回带有一些信息的xml响应。我将该响应反序列化为多个对象,每次调用时都可能不同。
假设每个对象有两个属性Label和Value。我希望网格显示具有与标签值匹配的标签的列,并具有来自值的值。因此,如果我有两个对象obj1和obj2,看起来像这样:
obj1.Label = "Parts"
obj1.Value = "17"

obj2.Label = "Parts"
obj2.Value = "12"

我希望有一个这样的网格,有两行:
Parts
17
12
如果我将数据源绑定到网格上,网格会自动使用对象的属性创建列,因此我看到了标签和值的列:
Label Value Parts 17
Parts 12
我假设我无法仅通过xaml实现所需的效果。有人有我要找的示例吗?还是需要我在运行时编程创建所有列?
3个回答

1
 <Grid>
    <DataGrid Name="dgTest" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=ItemsSource[0].Label}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Value}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

以及代码:

public partial class Window12 : Window
{
    public Window12()
    {
        InitializeComponent();

        List<MyClass> l = new List<MyClass>();

        l.Add(new MyClass
        {
            Label = "Parts",
            Value = "17"
        });

        l.Add(new MyClass
        {
            Label = "Parts",
            Value = "12"
        });

        dgTest.ItemsSource = l;
    }
}

public class MyClass
{
    public string Label { get; set; }
    public string Value { get; set; }
}

抱歉如果我在原帖中表达不清楚。我正在寻找使用Infragistics XamDataGrid的解决方案。 - Flack
这个解决方案如何帮助添加可变数量的列? - Kylo Ren

0

我在另一篇帖子中回答了这样的问题

添加可变列数

在那里,我创建了一个行为并根据某些条件(例如我的情况下的字段布局编号)添加了列。您可以检查数据源,然后执行相同操作。

您确实需要在某个地方定义一些列集,然后检索它们以根据数据源创建XamDataGrid的FieldLayout。例如:

        XamDataGrid xamDataGrid;
        if (DataSource.GetType() == typeof(X))
        {
            AddFieldLayout1(xamDataGrid);
        }
        else if (DataSource.GetType() == typeof(Y))
        {
            AddFieldLayout2(xamDataGrid);
        }

AddFieldLayout 方法中,将字段添加到网格布局中。

0
Iverzin的解决方案适用于XamDataGrid。它具有自动生成字段的功能,因此您不必在设计时指定它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接