【问题标题】:DataGrid displaying content value of 'System.Data.DataRowView'DataGrid 显示“System.Data.DataRowView”的内容值
【发布时间】:2017-01-08 21:55:31
【问题描述】:

我的一个 DataGrids 出现问题,这让我不知所措,因为我一直都是这样做的,而且它总是有效...

我的 DataTable 是这样实现的:

MyDataSets.Cash_TableData cashTable = new MyDataSets.Cash_TableData();

然后我通过以下方式用一些数据填充它:

cashTable = cashTableAdapter.GetDataByName(PersonsName);

这一切都很好。

我有一个包含以下内容的 DataGrid:

<DataGrid x:Name="dataGrid" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="22,354,0,0" VerticalAlignment="Top" Height="282" Width="695" IsReadOnly="True"/>

然后我用...填充 DataGrid

dataGrid.DataContext = cashTable.DefaultView;

但是,当我这样做时,每一列都会显示正确的数据,除了第 8 列显示“System.Data.DataRowView”。

我在第 8 列对 DataTable 中的每个项目执行了 Console.WriteLine,结果全部正确。

有什么想法可以正确显示第 8 列吗?列类型是字符串。

谢谢。

编辑

现金表现在在下面。出于隐私原因更改了某些列名...

CREATE TABLE [dbo].[Cash Table] (
    [Id]                 INT            IDENTITY (1, 1) NOT NULL,
    [Name]               NVARCHAR (MAX) NOT NULL,
    [Gender]             NVARCHAR (MAX) NULL,
    [DOB]                DATE           NOT NULL,
    [Address]            NVARCHAR (MAX) NOT NULL,
    [Address_Two]        NVARCHAR (MAX) NOT NULL,
    [Person_ID]          NVARCHAR (MAX) NOT NULL,
    [Transaction_Date]   DATE           NOT NULL,
    [Item]              NVARCHAR (MAX) DEFAULT ('Not recorded') NOT NULL,
    [xxx]   NVARCHAR (MAX) DEFAULT ('Not recorded') NULL,
    [Amount]             FLOAT (53)     NOT NULL,
    [xxx]      NVARCHAR (MAX) NOT NULL,
    [xxx]   NVARCHAR (MAX) NOT NULL,
    [xxx] NVARCHAR (MAX) NOT NULL,
    [xxx]          NVARCHAR (MAX) NOT NULL,
    [xxx]         BIT            NOT NULL,
    [xxx]           NVARCHAR (MAX) NOT NULL,
    [xxx]               NVARCHAR (MAX) NOT NULL,
    CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED ([Id] ASC)
);

【问题讨论】:

  • 你能发布Cash_TableData的实现吗?
  • 第 8 列有名字吗?检查THIS
  • 第 8 列确实有一个名称,“项目”。
  • 问题在于您的DataTable,您没有显示,而不是您的 DDL。
  • 看起来问题出在列名“项目”上。

标签: c# .net wpf datagrid


【解决方案1】:

在 MSDN 论坛上查看此主题:

DataGrid 单元格有 'System.Data.DataRowView' 作为值: https://social.msdn.microsoft.com/Forums/vstudio/en-US/c05b0ae2-86c5-4b14-9578-8e8f6d2e3175/datagrid-cell-has-systemdatadatarowview-as-a-value?forum=wpf

确保列名不包含空格。例如,这将使单元格值显示为“System.Data.DataRowView”:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn(" ") { });
dt.Rows.Add("1");
dataGrid.ItemsSource = dt.DefaultView;

这行得通:

dt.Columns.Add(new DataColumn("") { });

这会导致一个空白单元格(注意列名中的尾随空格):

dt.Columns.Add(new DataColumn("name ") { });

因此,请尝试将第 8 列的名称(或您的列的索引)设置为不带空格的有效名称:

cashTable.Columns[0].ColumnName = "unique";
dataGrid.DataContext = cashTable.DefaultView;

【讨论】:

    【解决方案2】:

    控制这3种情况,我认为该列是ComboBox,DropDownlist或类似的带有Value属性的东西

    1) 未分配列(或列控件)相关字段名称

    2) 列(或列控件)相关字段名称可能有误

    3) 列(或列控件)相关的字段名称有空格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2021-04-25
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多