Прежде всего, вы должны попытаться понять исключение, прочитав о нем и выяснив, в какой ситуации выдается это исключение.
Затем отладьте код, чтобы понять, почему это исключение выдается из вашего кода, ипопытайтесь понять, как это можно исправить.
В любом случае, возвращаясь к вашему коду.
Вы добавляете новые столбцы в таблицу только тогда, когда dt.Columns.Count
равен нулю.Таким образом, столбцы будут добавлены только для первой строки файла, поскольку в данный момент столбцы отсутствуют.И значения первой строки из файла будут успешно добавлены в таблицу.
После этого он не будет добавлять новые столбцы, и при попытке добавить значения в строку вы получите исключение, потому что теперь числоэлементы в строке отличаются от числа столбцов в таблице.
Таким образом, логически вам необходимо проверить, больше ли количество элементов в строке, чем текущее число столбцов в таблице данных.И если да, то добавьте это дополнительное количество столбцов в таблицу данных.
А также вместо использования dt.Rows.Add
добавьте значения в строку по одному.
Рассмотрите следующий код.
DataTable dt = new DataTable();
using (FileStream stream = File.OpenRead("logs.txt"))
{
using (StreamReader reader = new StreamReader(stream))
{
string line = reader.ReadLine();
while (line != null)
{
string[] items = line.Split(',');
// Check if the number of items in the line is
// greater than the current number of columns in the datatable.
if(items.Length > dt.Columns.Count)
{
// Add new columns to the datatable.
for (int i = dt.Columns.Count; i < items.Length; i++)
{
dt.Columns.Add("Column " + i);
}
}
// Create new row
var newRow = dt.NewRow();
// Loop thru the items and add them to the row one by one.
for (var j = 0; j < items.Length; j++)
{
newRow[j] = items[j];
}
//Add row to the datatable.
dt.Rows.Add(newRow);
line = reader.ReadLine();
}
// Bind datatable to the gridview.
dataGridView1.DataSource = dt;
}
}
Это должно помочь вам решить вашивыпуск.