2015-11-18 5 views
0

У меня небольшая проблема. Я никогда раньше не использовал DataTable или Datagridview. С успехом я добавляю имена столбцов, но когда дело доходит до добавления строки, все значения добавляются в один столбец. Вот код:C#, DataGridView и DataTable

StreamReader sr = new StreamReader(filename); 
    DataTable table = new DataTable(); 
    string [] datarow; 

    colt = sr.ReadLine(); 
    string[] columns = colt.Split(';'); 
    Count = columns.Length; 

    foreach (string c in columns) 
    { 
     Table1.Columns.Add("Column", c); 
     table.Columns.Add(c, typeof(String)); 
    } 

    while (!sr.EndOfStream) 
    { 
     rowt = sr.ReadLine(); 
     datarow = rowt.Split(';'); 

     foreach (string a in datarow) 
     {   
      table.Rows.Add(a); 
      Table1.Rows.Add(a); 
     } 
    } 
} 
+0

Я забыл: Table1 я DataGridView и таблица DataTable – q4zar

ответ

1

Во-первых, причина того, что вы видите только данные добавляются к первому столбцу является то, что метод DataGridview.Add добавляет всю строку в таблице, а не один элемент. Вот почему все отображается в первом столбце. Чтобы устранить эту проблему, можно передать весь массив следующим образом:

table.Rows.Add(datarow); 

Во-вторых, вы не должны заполнять DataGridView отдельно от DataTable. Это создает две копии данных, и любые данные, которые пользователь редактирует в представлении, будут не синхронизированы с DataTable. Вместо этого заполните DataTable и привяжите его к DataGridview. Любые изменения, которые пользователь делает, будут затем отражаться в DataTable. Ваш код будет выглядеть примерно так:

using (StreamReader sr = new StreamReader(filename)) 
{ 
    string [] datarow; 

    colt = sr.ReadLine(); 
    string[] columns = colt.Split(';'); 
    Count = columns.Length; 

    foreach (string c in columns) 
    { 
     table.Columns.Add(c, typeof(String)); 
    } 

    while (!sr.EndOfStream) 
    { 
     rowt = sr.ReadLine(); 
     datarow = rowt.Split(';'); 
     table.Rows.Add(datarow); 
    } 
    Table1.DataSource = table; 
} 
Смежные вопросы