如何显示 List<int>在数据表中水平? [英] How to display List&lt;int&gt; in DataTable horizontally?

查看:34
本文介绍了如何显示 List<int>在数据表中水平?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题与我之前的问题有关.在上一个问题中,感谢@EldHasp,我能够在DataGrid 中显示任意多个List 元素.
现在,我想在 DataTable 中做同样的事情.

This question relates to my previous question. In the previous question, thanks to @EldHasp, I was able to show arbitrarily many elements of List<int> in DataGrid.
Now, I'd like to do the same thing in DataTable.

我已经试过了;但是,它只显示 System.Collections.Generic.List 1[System.In32].我确定我错了,但我不知道如何解决这个问题.虽然我认为 AutoGenerateColumns="True" 会自动修复这个问题,但它没有发生.

I already tried it; however, it shows only System.Collections.Generic.List 1[System.In32]. I'm sure I'm wrong, but I don't know how to fix this. Although I thought AutoGenerateColumns="True" would fix this automagically, it didn't happen.

这是我的代码:

CatModel.cs(除注释外与上一个相同)

CatModel.cs (The same as the previous one except the comment-outs)

using System;
using System.Collections.Generic;

namespace WpfApp1
{
    public class CatModel
    {
        public CatModel(int Num, String Name, List<int> Test_List)
        {
            this.Num = Num;
            this.Name = Name;
            this.Test_List = Test_List;
        }
        public int Num { get; set; }
        public String Name { get; set; }
        public List<int> Test_List { get; set; }
    }
}

MainWindow.xaml.cs

MainWindow.xaml.cs

using System.Collections.Generic;
using System.Data;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace WpfApp1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DataTable result = new DataTable();

            result.Columns.Add("Num");
            result.Columns.Add("Name");
            for (int i = 0; i < 3; i++)
            {
                result.Columns.Add("Test_" + (i + 1));
            }

            result.Rows.Add(1, "AA", new List<int> { 1, 2, 3 });
            result.Rows.Add(2, "BB", new List<int> { 4, 5, 6 });
            result.Rows.Add(3, "CC", new List<int> { 7, 8, 9 });

            DataContext = result;
        }
    }
}

主窗口.xaml

<Window x:Class="WpfApp1.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"
        mc:Ignorable="d"
        Title="List" Height="350" Width="750"
        BorderThickness="1">

    <Grid Width="700" Height="300">
        <DataGrid IsReadOnly="True" AutoGenerateColumns="True" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="10,10,10,10"/>
    </Grid>
</Window>

推荐答案

一个可能的实现示例:

    public DataTable Table { get; }  = new DataTable();
    public MainWindow()
    {
        List<CatModel> result = new List<CatModel>();
        result.Add(new CatModel(1, "AA", new List<int> { 1, 2, 3 }));
        result.Add(new CatModel(2, "BB", new List<int> { 4, 5, 6 }));
        result.Add(new CatModel(3, "CC", new List<int> { 7, 8, 9 }));

        Table.Columns.Add(new DataColumn(nameof(CatModel.Num), typeof(int)));
        Table.Columns.Add(new DataColumn(nameof(CatModel.Name), typeof(string)));
        for (int i = 0; i < 3; i++)
        {
            Table.Columns.Add(new DataColumn ($"{i}", typeof(int)));
        }

        foreach (var cat in result)
        {
            var row = Table.NewRow();
            row[0] = cat.Num;
            row[1] = cat.Name;

            for (int i = 0; i < 3; i++)
            {
                row[2 + i] = cat.Test_List[i];
            }

            Table.Rows.Add(row);
        }

        InitializeComponent();
    }

<Window x:Class="WpfApp1.MainWindow"
        x:Name="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"
        mc:Ignorable="d"
        Title="List" Height="350" Width="750"
        BorderThickness="1">

    <Grid Width="700" Height="300">
        <DataGrid IsReadOnly="True" AutoGenerateColumns="True"
                  ItemsSource="{Binding Table, ElementName=mainWindow}"
                  HorizontalAlignment="Left" Margin="10,10,10,10"/>
    </Grid>
</Window>

P.S.结果集合是多余的.
我离开它只是因为与问题中的代码有关,以便更清楚表格单元格如何与原始数据链接.
最好在没有中间集合的情况下立即初始化表.

P.S. The result collection is superfluous.
I left it only because of the connection with the code in the question, so that it would be clearer how the table cells are linked with the original data.
Better to initialize the table right away without an intermediate collection.

这篇关于如何显示 List<int>在数据表中水平?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆