импортировать данные из CSV-файла в представление таблицы данных, в котором есть один из столбцов флажков, используя c # - PullRequest
0 голосов
/ 29 июня 2018

Я использую приведенный ниже код для извлечения содержимого файла cvs в представление таблицы данных, следующий код помог мне извлечь все содержимое файла csv, но при назначении этих данных представлению сетки данных возникла серьезная проблема. Так как мой CSV-файл содержит только два столбца текстовых данных, а мое представление таблицы данных содержит три столбца, один из них (первый столбец) - это столбец флажка, а остальные - столбцы текстового поля. И первоначально я хочу, чтобы мой столбец флажка был не отмечен, и, щелкнув один из них, я должен выбрать всю строку.

Вот мой код:

private void BtnBrowseCSV_Click(object sender, EventArgs e)
    {           
        this.BrowseCSV.Filter = "csv files|*.csv";
        DialogResult result = BrowseCSV.ShowDialog();            

        if (result == DialogResult.OK)
        {
            CSVFilePathTxtbx.Enabled = true;
            CSVFilePathTxtbx.Text = BrowseCSV.FileName;
        }

        CSVFile = CSVFilePathTxtbx.Text;           
        try
        {
            string[] fileContent = File.ReadAllLines(CSVFile);

            //Checks fileContent count > 0 then we have some lines in the file. If = 0 then file is empty
            if (fileContent.Count() > 0)
            {                   
                for (int i = 1; i < fileContent.Count(); i++)
                {
                    string[] rowData = fileContent[i].Split(',');
                    dtgrdvwUsersList.Rows.Add(rowData);
                    //dtgrdvwUsersList.Rows.Add(false, rowData[0], rowData[1]);
                }
            }
        }
        catch (Exception)
        {
            throw;
        }

        BtnNext.Enabled = true;
}

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете создать класс для каждой из ваших строк с добавленным свойством для CheckBox

public class LineImport
{
    // Name these properties in a meaningful way for your task
    public bool Check {get;set;} 
    public string Text1 {get;set;}
    public string Text2 {get;set;}

    // The constructor receives the line and process it.
    public LineImport(string line)
    {
        // You can add some safety checks here to be sure the right format 
        // has been passed 
        string[] parts = line.Split(',');
        this.Text1 = parts[0];
        this.Text2 = parts[1];
    }
}

Теперь, когда вы импортируете линии CSV вместо добавления линий непосредственно в вашу сетку, создайте List<LineImport> и добавьте элементы в этот список

List<LineImport> imports = new List<LineImport>();
foreach (string s in File.ReadLines(CSVFile))
{
    LineImport line = new LineImport(s);
    imports.Add(line);
}

Наконец, используйте источник данных вашей таблицы для привязки списка

BindingSource source = new BindingSource();
source.DataSource = imports;
dtgrdvwUsersList.DataSource = source;

Как видите, я также изменил File.ReadAllLines на File.ReadLines, чтобы разрешить перечисление строк без необходимости загружать все в память

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...