【问题标题】:How to display List<int> in DataTable horizontally?如何在 DataTable 中水平显示 List<int>?
【发布时间】:2021-11-03 10:16:26
【问题描述】:

这个问题与my previous question 有关。在上一个问题中,感谢@EldHasp,我能够在DataGrid 中任意显示List&lt;int&gt; 的许多元素。
现在,我想在 DataTable 中做同样的事情。

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

这是我的代码:

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

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

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

MainWindow.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>

【问题讨论】:

    标签: c# wpf list xaml datatable


    【解决方案1】:

    一个可能的实现示例:

        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.结果集合是多余的。
    我留下它只是因为与问题中的代码有联系,以便更清楚表格单元格如何与原始数据链接。
    最好在没有中间集合的情况下立即初始化表。

    【讨论】:

    • 是的。我不知道你的类的属性的名称,并将进行更正。但是result 集合是多余的。我留下它只是因为与你的代码有联系,让你更清楚。最好在没有中间集合的情况下立即初始化表。
    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多