将多个数组绑定到 datagridview

Bind multiple arrays to a datagridview

C#、.Net 4、VS2010

我有一个包含多个双精度数组的对象(最近将它们制成列表)。它看起来像:

public class Channel
{
    public List<DateTime> Date = new List<DateTime>();  //DateTime
    public List<double> Val1 = new List<double>();      //
    public List<double> Val2 = new List<double>();      //
    public List<double> Val3 = new List<double>();      //
    public List<double> Val4 = new List<double>();      //
}

所以现在我正在尝试用 DataSource 填充 DataGridView,但我只关心 DateVal1Val2 .我怎样才能做到这一点?

目前我正在遍历数组并将它们逐行添加到 DataGridView。但这真的很慢,因为我要处理大量数据文件。难道没有一种简单的方法来绑定我的数组并填充网格吗?我似乎无法弄清楚。

谢谢

我试过的代码:

Channel ch = new Channel();

List<object> datasource = new List<object>();

dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();

datasource.Add(ch.spotsList[0].Date);
datasource.Add(ch.spotsList[0].Val1);
datasource.Add(ch.spotsList[0].Val2);

dataGridView1.DataSource = datasource;

我正在使用的代码有效但速度很慢:

for (int i = 0; i < ch.spotsList[0].Date.Count; i++)
{
    dataGridView1.Rows.Add(ch.spotsList[0].Date[i].ToString("yyyy-MM-dd HH:mm:ss"), ch.spotsList[0].Val1[i].ToString("#.##"), ch.spotsList[0].Val2[i].ToString("#.##"));
}

DataGridViews 并不是真正为按列(例如您的)构建的数据模型设计的。相反,它们旨在与代表一行的模型一起使用。您的编辑似乎表明您开始按照这些思路进行思考。特别是,希望您的新数据模型类似于

public class Channel
{
  private _listings = new List<SpotsList>();

  public IList<SpotsList> SpotsList { get { return _listings; } }
}

public class SpotsList
{
  public DateTime Date { get; set; }
  public double Val1 { get; set; }
  public double Val2 { get; set; }
  public double Val3 { get; set; }
  public double Val4 { get; set; }
}

在这种情况下,您应该能够通过调用

将其加载到您的 DataGridView
Channel ch = new Channel();
// Add data to the channel
dataGridView1.DataSource = ch.SpotsList;

编辑

为了尝试更清楚地传达我的想法,下面的代码应该可以帮助您将您的方法映射到我的方法。

public class DataPoint
{
  public DateTime Date { get; set; }
  public double Val1 { get; set; }
  public double Val2 { get; set; }
}

// ... your other code ...

var dataSource = new List<DataPoint>();
for (int i = 0; i < ch.spotsList[0].Date.Count; i++)
{
  dataSource.Add(new DataPoint() 
  { 
    Date = ch.spotsList[0].Date[i],
    Val1 = ch.spotsList[0].Val1[i],
    Val2 = ch.spotsList[0].Val2[i]
  });
}
dataGridView1.DataSource = dataSource;