Я предполагаю, что sr
- это StreamReader
, который читает ваш текстовый файл - вы должны обернуть его в блок using
или try..finally
, чтобы обеспечить правильную очистку в случае ошибок.
Ваша текущая настройка не очень хорошо работает для случаев, когда текстовый файл не соответствует количеству строк/ячеек, которые у вас есть в DataGridView
(DGV): вы пытаетесь прочитать значение из файла для каждой ячейки, и если неправильно указан файл, вы можете попытаться прочитать его дальше конца. У вас должно быть больше обработки ошибок вокруг этого кода, потому что при чтении файла могут возникнуть различные проблемные места: слишком мало строк, слишком мало ячеек для строки, недопустимое значение для конкретной ячейки и т. д.
Ваша установка не очень хорошо поддается обработке. Если вы управляете форматом текстового файла, я бы рекомендовал изменить формат так, чтобы самая первая строка была счетчиком, а затем каждая строка в текстовом файле описывала полную строку для DGV, используя TAB
в качестве разделителя. Было бы гораздо проще загрузить такой файл. (Вы даже можете указать количество строк и количество столбцов в первой строке, чтобы получить еще больше информации о данных; у вас никогда не будет слишком много метаданных о входных данных.)
Таким образом, ваш новый формат текстового файла будет выглядеть примерно так:
3{TAB}5
R1C1{TAB}R1C2{TAB}R1C3{TAB}R1C4{TAB}R1C5{CRLF}
R2C1{TAB}R2C2{TAB}R2C3{TAB}R2C4{TAB}R2C5{CRLF}
R3C1{TAB}R3C2{TAB}R3C3{TAB}R3C4{TAB}R3C5{CRLF}
Если вы не можете изменить формат текстового файла, то просто прочитайте файл дважды - сначала ищите в конец файла и читайте обратно до конца строки перед последней - затем просто прочитайте одну строку из него - это должна быть строка считать. Вы можете сделать это, найдя новую строку в файле, начиная с конца. Затем просто перейдите к началу файла и прочитайте из него столько-то строк.
Изменить:
Как прокомментировал @vesan вопрос, если ваш входной файл невелик, вы можете просто вызвать File.ReadAllLines()
, чтобы получить все строки в файле string[]
. Тогда это тривиально обработать. Однако использование более удобного формата файла будет работать для любого размера файла. Чтение всех строк предполагает, что входной файл невелик.
Редактировать 2:
Например (для краткости обработка ошибок опущена):
var sLines = File.ReadAllLines ( open.FileName );
var nRowCount = int.Parse ( sLines[sLines.Length - 1] );
var nIndex = 0;
foreach (DataGridViewRow row in editDGV.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
cell.Value = sLines[nIndex];
nIndex++;
}
}
Если ваш текстовый файл правильный, nRowCount
будет иметь правильное количество строк, и вы никогда не прочитаете последний элемент вашего массива в DGV.
person
xxbbcc
schedule
10.06.2015
editDGV.Rows.Cells
? - person Dour High Arch   schedule 10.06.2015File.ReadAllLines
, а затем зацикливанияfor (int i=0;i<lines.Count-2;i++)
? - person vesan   schedule 10.06.2015