Как прочитать текстовый файл и добавить данные в представление сетки данных, имеющее источник привязки - PullRequest
0 голосов
/ 01 апреля 2019

У меня проблемы с загрузкой из текстового файла и помещением этой информации в представление сетки данных, привязанное к данным с использованием источника привязки.

private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
{
    Stream myStream = null;

    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "Text File|*.txt";
    var result = openFileDialog.ShowDialog();
    DataTable dataTable = (DataTable)MoviesDataGridView.DataSource;
    DataRow dtRow = (DataRow)MoviesDataGridView.DataSource;

    if (result != DialogResult.OK)
        return;
    try
    {
        using (myStream = openFileDialog.OpenFile())
        {
            string newline;
            StreamReader file = new StreamReader(myStream);
            while ((newline = file.ReadLine()) != null)
            {
                string[] lines = newline.Split('\t');
                for (int i = 0; i < lines.Length; i++)
                {
                    dtRow[i] = lines[i];
                }
                dataTable.Rows.Add(dtRow);
            }

            file.Close();
            MoviesDataGridView.DataSource = dataTable;
        }

    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: Could not read file from disk.  Original error: " + ex.Message);
    }
}

Хотите, чтобы он открылся и затем загрузился в dataGridView, однако я получаю эту ошибку исключения:

System.InvalidCastException: 'Невозможно привести объект типа' System.Windows.Forms.BindingSource 'к типу' System.Data.DataTable '.'

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Заменить:

DataTable dataTable = (DataTable)MoviesDataGridView.DataSource;
DataRow dtRow = (DataRow)MoviesDataGridView.DataSource;

С

DataTable dataTable = new DataTable();

Добавить столбцы в таблицу следующим образом:

DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "id";
table.Columns.Add(column);

И создайте новую строку в цикле while с помощью:

DataRow dtRow = dataTable.NewRow();
0 голосов
/ 01 апреля 2019

Вы можете попробовать добавить код ниже

BindingSource SBind = new BindingSource();
SBind.DataSource = dataTable;
MoviesDataGridView.Columns.Clear();
MoviesDataGridView.DataSource = SBind;

Ссылка от: как привязать данные к представлению данных в c #

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