Задать вопрос
@Nulltiton

Почему столбец не принадлежит таблице?

Мне нужно реализовать чтение из файла в DataTable и заполнить DateGridView информацией из DataTable
У меня есть два метода, первый создает колонки для DataGridView:
static public DataGridViewTextBoxColumn[] ColumnsCreating()
        {
            // инициализация массива названий столбцов
            string[] columnHeaders = { "ФИО", "№ зачетной книжки",
                "Специальность", "1 зачет", "2 зачет", "3 зачет",
                "3 зачет", "4 зачет", "5 зачет", "1 экзамен",
                "2 экзамен", "3 экзамен", "4 экзамен", "5 экзамен"};

            // объявление массива столбцов
            DataGridViewTextBoxColumn[] column = new DataGridViewTextBoxColumn[columnHeaders.Length];

            // автоматическое создание столбцов
            for (int i = 0; i < columnHeaders.Length; i++)
            {
                column[i] = new DataGridViewTextBoxColumn
                {
                    Name = "Column" + i.ToString(),
                    HeaderText = columnHeaders[i]
                };

                if (i > 2)
                    column[i].Width = 69;
            }
            return column;
        }

Второй заполняет строками из файла DataRow:
static public DataTable FileToTable()
        {
            //try
            {
                DataTable table = new DataTable();
                string[] list;
                string elem = "";
                string name = "database.txt";
                string buffer = "";

                FileStream file = new FileStream(name, FileMode.OpenOrCreate);
                using (StreamReader streamReader = new StreamReader(file))
                {
                    while (!streamReader.EndOfStream)
                    {
                        buffer = streamReader.ReadLine();
                        list = buffer.Split(';');

                        for (int i = 0; i < list.Length; i++)
                        {
                            elem = list[i];

                            DataRow row = table.NewRow();
                            row["Column" + i.ToString()] = elem;
                        }  
                    }                 
                }
                return table;

            }
            //catch
            {
                System.Windows.Forms.MessageBox.Show("Произошла ошибка при чтении файла");
                return null;
            }
        }

При выполнении первого метода у меня создаются нужные мне колонки, однако при выполнении второго, пишет, что они не принадлежат таблице, почему так?
62c19f62bb5dc012838635.png
  • Вопрос задан
  • 277 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Nulltiton Автор вопроса
В итоге переделал оба метода таким образом. Первый:
static public DataTable ColumnsCreating()
        {
            DataTable dataTable = new DataTable("student");

            // инициализация массива названий столбцов
            string[] columnHeaders = { "ФИО", "№ зачетной книжки",
                "Специальность", "1 зачет", "2 зачет", "3 зачет",
                "4 зачет", "5 зачет", "1 экзамен", "2 экзамен",
                "3 экзамен", "4 экзамен", "5 экзамен"};

            // автоматическое создание столбцов
            for (int i = 0; i < columnHeaders.Length; i++)
                dataTable.Columns.Add(columnHeaders[i]);
            return dataTable;
        }

Второй:
static public DataTable FileToTable()
        {
            try
            {
                DataTable dt = new DataTable();
                string[] list;
                string name = "database.txt";
                string buffer = "";

                dt = CreatingForm.ColumnsCreating();

                FileStream file = new FileStream(name, FileMode.OpenOrCreate);
                using (StreamReader streamReader = new StreamReader(file))
                {
                    while (!streamReader.EndOfStream)
                    {
                        buffer = streamReader.ReadLine();
                        list = buffer.Split(';');

                        DataRow row = dt.NewRow();

                        for (int i = 0; i < list.Length; i++)
                            row[i] = list[i];
                        
                        dt.Rows.Add(row);
                    }
                    return dt;
                }               

            }
            catch
            {
                MessageBox.Show("Произошла ошибка при чтении файла");
                return null;
            }
        }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы