【问题标题】:C# UWP - CSV in DatagridC# UWP - 数据网格中的 CSV
【发布时间】:2020-07-15 22:38:51
【问题描述】:

我一直在尝试将我的程序从 winForms 迁移到 UWP 作为学习练习;我是 C# 新手。

在我使用的 winForms 代码中:

private void BindData(string filePath)
        {
            DataTable dt = new DataTable();
            string[] lines = File.ReadAllLines(filePath);
            if (lines.Length > 0)
            {
                //first line to create header
                globals.count = lines.Length;
                string firstLine = lines[0];
                string[] headerLabels = firstLine.Split(',');
                foreach (string headerWord in headerLabels)
                {
                    dt.Columns.Add(new DataColumn(headerWord));
                }
                //For Data
                for (int i = 1; i < 100; i++)
                {
                    string[] dataWords = lines[i].Split(',');
                    DataRow dr = dt.NewRow();
                    int columnIndex = 0;
                    foreach (string headerWord in headerLabels)
                    {
                        dr[headerWord] = dataWords[columnIndex++];
                    }
                    dt.Rows.Add(dr);
                }
          }
    }

我怎样才能复制这个。 我尝试关注this guidethis guide

【问题讨论】:

标签: c# gridview uwp datagridview datagrid


【解决方案1】:

UWP - 数据网格中的 CSV

要加载 csv 数据并显示到 DataGrid 控件中,您可以参考我之前的案例 reply,它加载 csv 文件并解析到 DataGrid ItemResource。该回复包含完整的 xaml 和后面的代码。请注意存储在项目文件夹中的 csv 文件。如果文件存储在您场景中的其他位置,我们建议使用FileOpenPicker 访问 csv 文件。

Xaml 代码

    <controls:DataGrid
        x:Name="MyDataGrid"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch"
        AlternatingRowBackground="Transparent"
        AlternatingRowForeground="Gray"
        AreRowDetailsFrozen="False"
        AreRowGroupHeadersFrozen="True"
        AutoGenerateColumns="False"
        CanUserReorderColumns="True"
        CanUserResizeColumns="True"
        CanUserSortColumns="False"
        ColumnHeaderHeight="32"
        FrozenColumnCount="0"
        GridLinesVisibility="None"
        HeadersVisibility="Column"
        HorizontalScrollBarVisibility="Visible"
        IsReadOnly="False"
        Loaded="DataGrid_Loaded"
        MaxColumnWidth="400"
        RowDetailsVisibilityMode="Collapsed"
        RowGroupHeaderPropertyNameAlternative="Range"
        SelectionMode="Extended"
        VerticalScrollBarVisibility="Visible"
        >
        <controls:DataGrid.RowGroupHeaderStyles>
            <Style TargetType="controls:DataGridRowGroupHeader">
                <Setter Property="Background" Value="LightGray" />
            </Style>
        </controls:DataGrid.RowGroupHeaderStyles>
    
        <controls:DataGrid.Columns>
            <controls:DataGridTextColumn
                Binding="{Binding Id}"
                Header="Id"
                Tag="Id"
                />
            <controls:DataGridTextColumn
                Binding="{Binding Title}"
                Header="Title"
                Tag="Title"
                />
            <controls:DataGridComboBoxColumn
                Binding="{Binding Link}"
                Header="Link"
                Tag="Link"
                />
            <controls:DataGridTextColumn
                Binding="{Binding Type}"
                Header="Type"
                Tag="Type"
                />
            <controls:DataGridTextColumn
                Binding="{Binding Remark}"
                Header="Remark"
                Tag="Remark"
                />
            <controls:DataGridTextColumn
                Binding="{Binding Time}"
                Header="Time"
                Tag="Time"
                />
        </controls:DataGrid.Columns>
    </controls:DataGrid>

模型类

    public class Item
    {
        public string Id { get; set; }
        public string Title { get; set; }
        public string Link { get; set; }
        public string Type { get; set; }
        public string Remark { get; set; }
        public string Time { get; set; }
    }

**Data Process**

    private ObservableCollection<Item> Items;
    private void DataGrid_Loaded(object sender, RoutedEventArgs e)
    {
        using (var reader = new StreamReader("Assets\\Archive.csv",true))
        using (var csv = new CsvReader(reader))
        {
            var records = csv.GetRecords<Item>();
            Items = new ObservableCollection<Item>(records);           
        }
    
        MyDataGrid.ItemsSource = Items;           
    }

【讨论】:

  • 那个答案不会复制上面的代码。它需要我知道文件包含哪些列标题和多少列。这会使这个程序非常难以操作。
  • 我在之前的回复中分享了示例代码。为了更好理解,我复制了上面,请检查。
猜你喜欢
  • 2019-07-13
  • 1970-01-01
  • 2020-12-16
  • 2017-01-26
  • 2018-06-08
  • 2020-08-02
  • 2020-12-15
  • 1970-01-01
  • 2020-01-30
相关资源
最近更新 更多