2016-04-12 4 views
0

C#, .Net 4, VS2010Привязка нескольких массивов к DataGridView в

Я объект, который содержит несколько массивов двойников (недавно их в списки). Это выглядит примерно так:

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>();  // 
} 

Так теперь я пытаюсь заполнить DataGridView с DataSource, но я только заботиться о Date, Val1 и Val2. Как я могу это достичь?

В настоящее время я просматриваю массивы и добавляю их по строкам в DataGridView. Но это очень медленно, поскольку у меня есть огромный файл данных для работы. Нет ли простого способа просто привязать мои массивы и заполнить сетку? Кажется, я не понимаю.

Благодаря

Code Я пробовал:

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("#.##")); 
} 
+0

fyi существует разница между списком и массивом. в любом случае сделать простой поиск в Google о том, как связать List с datagridview, это очень простая задача btw .. и есть много существующих примеров на «Stackoverflow, а также на остальной части Интернета» - например, http: // stackoverflow. com/questions/6473326/using-a-list-as-a-data-source-for-datagridview – MethodMan

+0

Правильно, они были массивами, и я сделал их списками динамическими. У меня есть примеры для Google, но он работает только для одного списка. Я не могу найти способ связать несколько списков с datagridview (по одному для каждого столбца). – Baddack

+0

Возможно, вам следует показать весь соответствующий код, где вы пытались привязать datagridview к списку MethodMan

ответ

2

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; 
+0

Спасибо за ответ, я думаю, что вы правы. Я думаю, проблема в том, что каждый из моих spotList имеет N количество данных datetime, val1, val2 и т. Д. Поэтому я считаю, что подход к источнику данных может оказаться невыполнимым. Мне просто нужно будет придерживаться цикла for. Спасибо – Baddack

+0

Я просто пытался об этом подумать, как mscharts. В диаграммах ms я могу привязать свои x и y к каждой серии, что в основном то, что я пытаюсь сделать здесь, у меня есть 3 vals, которые делят datetime, поэтому я пытаюсь привязать все свои значения к этому datagridview. Я играю с наборами данных и datatables, чтобы посмотреть, есть ли способ, но пока не понял. – Baddack

+0

Я понимаю, где ваш ум. В отличие от MsCharts, DataGridViews лучше работают со списками точек {x, y, z}, чем с отдельными списками значений x, y и z. Надеюсь, мое редактирование на мой ответ поможет еще больше вдохнуть этот подход. – erdomke