2016-08-03 2 views
0

У меня есть дата, заполненная отчетом веб-службы. Теперь я пытаюсь отобразить datatable в datagridview. Это код, я использую, чтобы построить DataTable:Datatable values ​​to datagridview, отображающий только данные из одного столбца

// Create DataTabe to handle the output 
DataTable dt = new DataTable(); 

dt.Clear(); 
dt.Columns.Add("EmployeeFirstName"); 
dt.Columns.Add("EmployeeLastName"); 
dt.Columns.Add("DepartmentName"); 
dt.Columns.Add("DepartmentCode"); 
dt.Columns.Add("LocationName"); 
dt.Columns.Add("DivisionCode"); 
dt.Columns.Add("EarningName"); 
dt.Columns.Add("OTHours"); 
dt.Columns.Add("WorkDate") 

Заполните новый DataTable:

foreach (ReportRow row in report.Rows) 
{ 
    dt.Rows.Add(string.Join(",", row.ColumnValues)); 
} 

Тогда я пытаюсь связать данные в DataTable к DataGridView:

dataGridView1.AutoGenerateColumns = true; 
dataGridView1.DataSource = dt; 
dataGridView1.Refresh(); 

Когда я запускаю приложение, он отображает только данные из первого столбца в datatable. Нужен ли мне цикл, чтобы работать через столбцы, или я просто пропустил шаг?

ответ

0

Ну, после спящего, я нашел проблему с отбрасыванием ее в таблицу sql ... Я не принимал во внимание, что экспорт в CSV и добавление «,» повлияет на экспорт в sql. Вот модификация строк кода, которая была проблемой:

foreach (ReportRow row in report.Rows) 
    { 
     dt.Rows.Add(row.ColumnValues); 
    } 

Спасибо всем за ваши ответы!

0

Да, это потому, что вы добавляете только одно значение к своему dt, когда говорите dt.Rows.Add(string.Join(",", row.ColumnValues));. Вы должны делать что-то, как показано ниже (при условии, что ReportRow также имеет столбцы с одинаковыми именами, как "EmployeeFirstName" еще изменить названия соответственно)

foreach (ReportRow row in report.Rows) 
{ 
    DataRow dr = dt.NewRow(); 
    dr["EmployeeFirstName"] = row["EmployeeFirstName"]; 
    dr["EmployeeLastName"] = row["EmployeeLastName"]; 
    dr["DepartmentName"] = row["DepartmentName"]; 
    //rest of the columns fill 

//once all columns filled 
dt.Rows.Add(dr); 
} 
+0

я попытался сделать это в более ранней ревизии, но подошел со следующей ошибкой: Не удается применить индексирование с [] к выражению типа «ReportCollector.ReportService.ReportRow» Кроме того, при экспорте дт в csv-файл, я вижу все данные, которые мне нужны в dataGridView, с кодом, который я изначально опубликовал. С самого начала я мог бы с этим справиться. – Jeremy

0

dt.Rows.Add(string.Join(",", row.ColumnValues)); -> Вы можете добавить один DataRow элемент или массив объектов.

С вашего вызова вы выбрали более поздний вариант, вы добавляете массив объектов, за исключением того, что добавляете объект ОДИН ОДИН.

string.Join(",", row.ColumnValues) - один объект.

Смежные вопросы