【问题标题】:CSV data not rendering on WPF ui of DataGrid [duplicate]CSV数据未在DataGrid的WPF ui上呈现[重复]
【发布时间】:2019-02-12 15:07:16
【问题描述】:

我是 C# 新手, CSV 数据未在 DataGrid 的 WPF ui 上呈现,我从 csv 获取数据但无法在 ui 上显示,谁能帮帮我?

下面是我的 XAML 代码-

<Window x:Class="SampleApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SampleApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="825">
    <DataGrid AutoGenerateColumns="True" Height="217" HorizontalAlignment="Left" Margin="73,33,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="707">

        <DataGrid.Columns>
            <DataGridTextColumn Header="Serials" Width="40" Binding="{Binding Serials}"></DataGridTextColumn>
            <DataGridTextColumn Header="Number" Width="100" Binding="{Binding Number}"></DataGridTextColumn>
            <DataGridTextColumn Header="InstalledCode" Width="100" Binding="{Binding InstalledCode}"></DataGridTextColumn>
            <DataGridTextColumn Header="InstalledTime" Width="100" Binding="{Binding InstalledTime}"></DataGridTextColumn>
            <DataGridTextColumn Header="Location" Width="100" Binding="{Binding Location}"></DataGridTextColumn>
            <DataGridTextColumn Header="Site" Width="40" Binding="{Binding Site}"></DataGridTextColumn>
            <DataGridTextColumn Header="UUID" Width="40" Binding="{Binding UUID}"></DataGridTextColumn>
            <DataGridTextColumn Header="Uninstalled" Width="100" Binding="{Binding Uninstalled}"></DataGridTextColumn>
            <DataGridTextColumn Header="Notes" Width="100" Binding="{Binding Notes}"></DataGridTextColumn>
        </DataGrid.Columns>

    </DataGrid>

</Window>

更新1: 以下是c#代码:

private void LoadBound(string fName)
        {
            String textLine = string.Empty;
            String[] splitLine;
            var data = new DataTable();
            var sharath = new DataTable();
            data.Columns.AddRange(new[]
                                   {
                               new DataColumn ("Serials"),
                               new DataColumn ("Number"),
                               new DataColumn ("InstalledCode"),
                               new DataColumn ("InstalledTime"),
                               new DataColumn ("Location"),
                               new DataColumn ("Site"),
                               new DataColumn ("UUID"),
                               new DataColumn ("Uninstalled"),
                               new DataColumn ("Notes")

                            });
            data.Rows.Clear();

            if (System.IO.File.Exists(fName))
            {
                System.IO.StreamReader objReader = new System.IO.StreamReader(fName);

                var contents = objReader.ReadToEnd();

                var strReader = new System.IO.StringReader(contents);

                do
                {
                    textLine = strReader.ReadLine();
                    if (textLine != string.Empty)
                    {
                        splitLine = textLine.Split(',');
                        if (splitLine[0] != string.Empty || splitLine[1] != string.Empty)
                        {
                            data.Rows.Add(splitLine[0]);
                        }
                    }
                } while (strReader.Peek() != -1);

            }
            dataGrid1.DataContext = data;
        }

更新2:

我的 CSV 文件是

10,20,30,40,50,60,70,80
1,2,3,4,5,6,7,8

谁能帮我将数据从 csv 填充到 WPF Ui?

【问题讨论】:

  • 您的代码实际上并没有尝试显示 CSV 数据,而是您从 CSV 文件创建的 DataTable。也就是说,我认为您需要设置 dataGrid1.ItemsSource = data; 而不是 DataContext - 有关绑定到数据表的各种方法,请参阅这篇文章。 stackoverflow.com/questions/20770438/…

标签: c# wpf csv datagrid wpfdatagrid


【解决方案1】:

您没有在任何地方设置 DataGrid.ItemsSource。

如果 DataContext 设置为 DataTable,则 ItemsSource 可以通过 xaml 中的绑定来设置:

ItemsSource="{Binding Path=DefaultView}"

或者从代码中设置 ItemsSource:

dataGrid1.ItemsSource = data.DefaultView;

【讨论】:

  • 只有第一行会获取数据,其余行为空。@ASh
  • 当我尝试 data.Rows.Add(splitLine[1]);和 data.Rows.Add(splitLine[2]); ....等类似,但数据附加在同一行(第一行)。你能告诉我为什么吗?
  • @SharathkumarKG,我看不出你的代码有任何明显的问题。我可以建议在调试中检查您从文件中获取了多少行,以及它们包含哪些值。 File.ReadAllLines 也可能是更简单的任务方法
  • 添加了我的 csv 文件,splitLine[1] 从 csv 文件中获取 10 和 1,同样 splitLine[2] 从 csv 文件中获取 20 和 2
猜你喜欢
  • 2021-05-04
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 2015-08-23
相关资源
最近更新 更多