Если вы пытаетесь просто получить данные из файла в DataGridView в соответствии с исходным вопросом, похоже, вы предпринимаете дополнительные шаги.Это отправит его в DataGridView:
//Buffer for IO reading
const Int32 BufferSize = 512;
private void button2_Click(object sender, EventArgs e)
{
try
{
//Open the file and keep it open while there are lines with using
using (var fileStream = File.OpenRead(fileName))
{
//Open the reader and keep it open while reading non null lines
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize))
{
String line;
//While the StreamReader is reading a line and it is not null, how to handle the line
while ((line = streamReader.ReadLine()) != null)
{
//Split the string into an array
string[] splitarray = line.Split('-');
//Add the pieces of the array as a new row into the DataGridView
//This should be inside of a try/catch block or have some validation to make sure the array is a certain length (5 in this case)
dataGridView.Rows.Add(splitarray[0], splitarray[1], splitarray[2], splitarray[3], splitarray[4]);
}
}
}
}
catch(Exception ex){
Console.WriteLine(ex.message)
}
}
Вам не нужен DataRow, DataTable или для циклического перебора всех строк каждый раз, когда StreamReader читает другую строку (!).
ПРИМЕЧАНИЕ : не удастся изменить порядок индексов.Также произойдет сбой, если недостаточно индексов с исключением IndexOutOfRange.Кроме того, если в данных есть еще тире, они могут испортить ваш заказ.
IO Note : если это не сделано в отдельном потоке, пользовательский интерфейс будет зависать, как и выиспользуя основной поток для выполнения этой операции.Вы можете использовать BackgroundWorker для выполнения ввода-вывода, а затем применить результаты с BindingSource, упомянутым ниже.
Если вы используете DataTable и DataRow где-то еще, вы можете сохранить их, ноони не обязательны для заполнения DataGridView.
Теперь, если этот файл очень большой с большим количеством строк, он будет ЧРЕЗВЫЧАЙНО медленным (насколько я знаю из опыта) рисовать это.Я бы порекомендовал использовать BindingSource , если вы ожидаете, что его будет много (или даже несколько с частыми перерисовками).