You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF中DataTable填充ListView异常,显示DataRowView求助

解决WPF ListView显示System.Data.DataRowView的问题

我来帮你搞定这个问题!你遇到的界面显示System.Data.DataRowView的情况,核心原因是WPF的ListView没有被配置正确的列绑定规则——它默认不知道该如何解析DataRowView对象,所以直接输出了对象的类型名称。咱们一步步来修正:

1. 补全DataTable构建与ListView绑定逻辑

先把你没写完的代码补全,确保DataTable能正确生成列和行,同时给ListView配置好列渲染规则:

public partial class MainWindow : Window
{
    ListView items;
    string toParse = "1 12 13\n2 15 16\n3 9 14\n20 123 541235\n4 1234 567";
    string toParse2 = "id value1 value2";

    public MainWindow()
    {
        InitializeComponent();
        SetupListView();
    }

    private void SetupListView()
    {
        // 1. 创建DataTable并定义列
        DataTable dataTable = new DataTable();
        string[] columnNames = toParse2.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string colName in columnNames)
        {
            dataTable.Columns.Add(colName, typeof(string));
        }

        // 2. 填充行数据
        string[] rows = toParse.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string row in rows)
        {
            string[] rowValues = row.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            dataTable.Rows.Add(rowValues);
        }

        // 3. 绑定数据源到ListView
        items.ItemsSource = dataTable.DefaultView;
        // 关键步骤:动态生成GridView列,指定每个列要绑定的字段
        CreateGridViewColumns(dataTable);
    }

    private void CreateGridViewColumns(DataTable dataTable)
    {
        GridView gridView = new GridView();
        foreach (DataColumn col in dataTable.Columns)
        {
            GridViewColumn column = new GridViewColumn();
            column.Header = col.ColumnName;
            // 设置列内容的绑定,关联到DataRowView对应的列名
            column.DisplayMemberBinding = new Binding(col.ColumnName);
            gridView.Columns.Add(column);
        }
        items.View = gridView;
    }
}

2. 确保XAML中的ListView控件配置正确

你的XAML里需要定义好ListView控件(如果还没添加的话):

<Window x:Class="YourProjectNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ListView x:Name="items"/>
    </Grid>
</Window>

问题根源解释

当你直接把DataTable.DefaultView绑定到ListView的ItemsSource时,ListView默认使用的是基础的ItemsView,它不会自动解析DataRowView的属性值,只会调用对象的ToString()方法,所以就显示了System.Data.DataRowView。

只有当我们给ListView指定GridView,并为每一列设置DisplayMemberBinding绑定到DataTable的列名时,WPF才知道要渲染每个单元格的具体数据,而不是输出对象类型名称。

如果想更快捷,也可以开启自动生成列的功能(不过手动生成更灵活,方便后续自定义列样式):

items.View = new GridView();
((GridView)items.View).AutoGenerateColumns = true;

内容的提问来源于stack exchange,提问作者SolisQQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:56:34