将多个数组绑定到 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
,但我只关心 Date
、Val1
和 Val2
.我怎样才能做到这一点?
目前我正在遍历数组并将它们逐行添加到 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;
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
,但我只关心 Date
、Val1
和 Val2
.我怎样才能做到这一点?
目前我正在遍历数组并将它们逐行添加到 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;