【问题标题】:Datagridtextcolumn bind to datatableDatagridtextcolumn 绑定到数据表
【发布时间】:2011-10-28 05:41:25
【问题描述】:

当我有一个数据表并且我想将数据网格中的每个 datagridtextcolumn 绑定到数据表中的每一列时,我遇到了一些问题。

我的代码如下

public class Packet
{
    public Header header { get; set; }
    public Frame frame { get; set; }
    public Tail tail { get; set; }
    public String id { get; set; }

    public Packet(String id,Header header, Frame frame, Tail tail)
    {
        this.id = id;
        this.header = header;
        this.frame = frame;
        this.tail = tail;
    }

}

因此在我的 xaml 方面

<Grid >
    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=.}" Name="dgrid" SelectionChanged="dgrid_SelectionChanged">
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding Path=id}"/>
        </DataGrid.Columns>

    </DataGrid>
</Grid>

在我的代码方面,ds 是一个具有一个数据表的数据集。每行是一个包 4 列,对应于 header frame tail 和 id。我试图让 id 首先正确绑定。但是id号不能显示在datagrid上。

dgrid.DataContext = ds.Tables[0];

如果我不在 xaml 端使用 datagridtextcolumn,它实际上会显示正确的数据。但我想要的是在 xaml 端对数据表进行绑定。

【问题讨论】:

  • 好像没问题。你能在 Debug 窗口中看到任何关于 Binding 的第一个异常吗?还是您检查ds.Tables[0] 的实例是否已正确初始化?
  • @edelweiss 尝试删除数据网格上的绑定,然后在您的代码上执行此操作。
  • @jwJung 当我运行它时,我在输出窗口中看到了这个。 System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“DataRowView”(HashCode=8381127)上找不到“id”属性。绑定表达式:路径=id; DataItem='DataRowView' (HashCode=8381127);目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)。这意味着它实际上没有绑定正确?
  • @edelweiss:是的,确实如此。该错误消息意味着您的 DataTable 没有名为 id 的列。我想知道如何将 Packet 与 DataRow 关联起来。
  • ds.Tables[0] 项与您的 Packet 类有何关系?如果您的绑定不起作用,您应该向我们展示 ds.Tables[0] 列,因为那是您绑定到的 itemssource

标签: c# wpf


【解决方案1】:

试试这个

 <Grid >
        <DataGrid AutoGenerateColumns="False" Name="dgrid" SelectionChanged="dgrid_SelectionChanged">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding Path=id}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

    dgrid.ItemsSource = ds.Tables[0].AsDataView();

【讨论】:

    【解决方案2】:

    如果你有一个像Packet 这样的模型类,那么我建议使用可观察集合而不是DataTable 来保存Packets 的列表。 DataTable 的项目类型为 DataRowView

    我什至不确定您的DataTable 是如何持有Packet 实例的?

    如果您的 ds.Tables[0].Rows[0] 是 Packet 类型或 ds.Tables[0].Rows[0][0]Packet 类型?

    如果是这样,那么绑定会带来很多麻烦。

    【讨论】:

      猜你喜欢
      • 2013-10-05
      • 2012-04-29
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多