Намерих добре написан CSV анализатор/четец от тази връзка написано от Себастиен Лорион.
Това, което ми харесва в този CSV анализатор е, че мога лесно да го свържа с DataGrid като:
using (CachedCsvReader csv = new
CachedCsvReader(new StreamReader(txtChosenFile.Text), true))
{
dataGridView1.DataSource = csv;
}
Това е, от което имам нужда в моя проект, защото искам моите потребители да го прегледат, преди да го ангажират в базата данни.
Въпреки това, тъй като зареждането на файл отнема известно време, трябва да осигуря поне обратна връзка на моя потребител с помощта на лента за напредъка. За съжаление, това е само един ред за получаване на класа CachedCsvReader
, което ме затруднява да свържа или актуализирам лента за напредък, докато четенето на csv файла напредва.
Ако това е просто CsvReader
клас, ще бъде лесно да актуализирам моята лента за напредък като:
using (StreamReader sr = new StreamReader(openFileDialog1.FileName))
{
using (CsvReader csv = new
CsvReader(sr, true))
{
double progress = (double) sr.BaseStream.Position / (double) sr.BaseStream.Length;
progressBar1.Value = (int)progress*100;
}
}
Въпреки това, тъй като използвам CachedCsvReader
и това е само една линия (или две), за да кача четеца на csv, без да имам информация за позицията и дължината на потока, тогава не можах да актуализирам лентата си за напредък.
И така, какъв би бил най-добрият начин да свържа моята лента за напредък към моя CachedCsvReader?