C# 使用DataTabe、List<&燃气轮机;和DataGridView内部嵌套,用于下一步

C# 使用DataTabe、List<&燃气轮机;和DataGridView内部嵌套,用于下一步,c#,.net,for-loop,arraylist,datatable,C#,.net,For Loop,Arraylist,Datatable,我试图从内部的特定列表中获取信息,以便下一个循环能够将数据放置在DataTable中,以便在DataGridView中显示它。好吧,我已经搜索和尝试了几个小时,但我没有得到我想要的结果。我想我就快到了,但有些事情我做错了。有人愿意帮助我吗 private void Form4_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); //Set first column n

我试图从内部的特定列表中获取信息,以便下一个循环能够将数据放置在DataTable中,以便在DataGridView中显示它。好吧,我已经搜索和尝试了几个小时,但我没有得到我想要的结果。我想我就快到了,但有些事情我做错了。有人愿意帮助我吗

    private void Form4_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        //Set first column names
        //dt.Columns.Add("Sample No");
        for (int i = 0; i <= frmMain.iAnaChan-1; i++)
        //Loop to add analog channel columns
        {
            dt.Columns.Add(frmMain.AnalogChannelList[i].ch_id.ToString());

        }

        DataRow row = dt.NewRow();
        for (int sam = 1; sam <= frmMain.TotSamples ; sam++)
        {
            
            for (int chan = 0; chan <= frmMain.iAnaChan -1; chan++)
            { 
            
            row[chan] = frmMain.channeldata[sam-1].sSampleVal.ToString();

                dt.Rows.Add(row);
            }

        }
        
        dataGridViewSampleData.DataSource = dt;
        
    }
iAnaChan
是一个整数,不应设置“通道”的数量,即我需要的列。如果我不运行下面的代码,这是正确的。
在我需要开始行时,行的数量具有
frmMain.TotSamples
的值,并将它们放置在For Next循环中,这样它将自动放置行。然后我尝试在列中分别添加示例值和行。在所有循环都通过之后,我尝试将其放置在数据表中。但不幸的是,这不起作用,我真的很想知道我做错了什么?

您可以创建
公共可观察集合项{get;set;}
,您将使用foreach循环将这些项添加到其中

foreach (var item in dataCollection)
    Items.Add(item)

然后只需将DataGrid的
ItemSource
设置为
Items
。DataGrid能够以这种方式自动生成自身。

好的,所以我尝试的方法是不可能的,我应该使用一种不同的策略,正如您在这里解释的那样?Pff好的,我必须进入
可观察的收集项{get;set;}
。谢谢您提供的信息。@ElectricRay81我今天已经在一个应用程序中这样做了,所以这个解决方案应该可以工作,而且比摆弄数据表要容易得多。@Thomas谢谢,我将进入这个话题,看看它是如何工作的。我已经为此苦苦挣扎了两天,没有得到我需要的结果。但这是学习的方式;)@约翰,我加了两个班。首先,我知道我可以使用列表作为DataGrid的数据源。但是它没有显示我想要的信息。我从两个不同的文件中检索此信息。
aChannelList.ch_id
来自一个文件,这应该给我列及其名称。
SampledData.sTimeStamp
SampledData.sSampleVal
来自其他文件,应写入行中。现在,当我使用
SampledData
作为数据源时,它显示(如果我有6个通道)前6次
sSampleVal
,使用相同的
sTimeStamp
所以我得到这个时间戳1,值100时间戳1,值50(每个通道)时间戳2,值120时间戳2,值60,但我想要:时间戳1,值100,值50时间戳2,价值120,价值60我希望这对你有意义
foreach (var item in dataCollection)
    Items.Add(item)