DataGrid显示' System.Data.DataRowView'的内容值

时间:2017-01-08 21:55:31

标签: c# .net wpf datagrid

我的一个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列,其中显示&#34; System.Data.DataRowView&#34;。

我在第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)
);

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

控制这3个案例,我认为该列是ComboBox,DropDownlist或具有Value属性的类似

  

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

     

2)列(或列控件)相关字段名称可能不正确

     

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