Чтение файла excel в таблице данных и отображение его в виде списка с флажками
Привет, команда. Я очень новичок в C# и любезно не жалею, если есть ошибки.
Чтобы прочитать 2-й и 3-й столбцы в файле excel в таблице данных и отобразить его в виде списка с флажками.
Заранее спасибо за помощь!!
Что я уже пробовал:
Создал две функции отдельно. Один для инициализации OLEDB, а другой для чтения файла в таблице данных. И, наконец, с помощью действия кнопки вызывается таблица данных и файл excel отображается в виде списка с флажками.
ЗАПИСКА:
Файл excel состоит из 5 листов, и из этих 5 я хочу прочитать 2-й и 3-й столбцы 2-го листа.
нажав кнопку Далее, вы перейдете на следующую вкладку, где присутствует окно просмотра списка.
void InitializeOledbConnection(string filename, string extrn) { connString = ""; if (extrn == ".xlsx") connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + glb + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1'"; //for above excel 2007 else connString = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + glb + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"; //for below excel 2007 Oledb = new OleDbConnection(connString); } private DataTable ReadFile() { schemaTable = new DataTable(); OleDbCommand Oledbcmd = new OleDbCommand(); Oledbcmd.Connection = Oledb; Oledb.Open(); //using (OleDbConnection Oledb = new OleDbConnection(connString)) Oledbcmd.CommandText = "Select * from [CONTROL_TABLE$]"; OleDbDataReader dr = Oledbcmd.ExecuteReader(); ContentTable = new DataTable(); ContentTable = null; if (dr.HasRows) { ContentTable = new DataTable(); ContentTable.Columns.Add("SIGNAL", typeof(string)); ContentTable.Columns.Add("ROUTE_BUTTON", typeof(string)); while (dr.Read()) { if (dr[0].ToString().Trim() != string.Empty && dr[1].ToString().Trim() != string.Empty && dr[2].ToString().Trim() != string.Empty && dr[0].ToString().Trim() != " " && dr[1].ToString().Trim() != " " && dr[2].ToString().Trim() != " ") { ContentTable.Rows.Add(dr[0].ToString().Trim(), dr[1].ToString().Trim(), dr[2].ToString().Trim()); } } } dr.Close(); Oledb.Close(); Oledb.Dispose(); return ContentTable; } private void t1NextTabRedirectButton_Click(object sender, EventArgs e) { tabControl.SelectedTab = routeNameTabPage; { string filePath = string.Empty; string fileExt = string.Empty; InitializeOledbConnection("C:\\gui_Files\\ICT_LAYOUT_AJJ.xlsx", ".xlsx"); DataTable tempTable = ReadFile(); { for (int i = 0; i < schemaTable.Rows.Count; i++) { glb = schemaTable.Rows[i]["SIGNAL"].ToString(); glb = schemaTable.Rows[i]["ROUTE_BUTTON"].ToString(); } routeNamesListView.Columns.Add("SIGNAL"); routeNamesListView.Columns.Add("ROUTE_BUTTON"); routeNamesListView.View = View.List; routeNamesListView.CheckBoxes = true; } } }
Richard MacCutchan
И в чем же заключается ваш вопрос?
Arvi.S
Для чтения 2 столбцов в листе excel и отображения значений в элементе управления list view с флажками
Richard MacCutchan
Да, вы уже сказали это, но вы не объяснили, какая у вас проблема с вышеприведенным кодом.
Arvi.S
Он показывает мне "необработанное исключение типа 'System.ArgumentException' произошло в System.Data.dll" указывая на
"ContentTable.Rows.Add(dr[0].ToString().Trim(), dr[1].ToString().Trim(), dr[2].Метод toString().Отделка());"
Поскольку я новичок в C#, я понятия не имею, зачем использовать этот "dr[]".
Richard MacCutchan
Тогда мне действительно нет особого смысла пытаться объяснить вам это. Как вам удалось написать этот код, если вы его не понимаете? В качестве основного ответа вы не должны использовать составные операторы, подобные этому, прежде чем проверить, что каждый из элементов, на которые вы пытаетесь ссылаться, действительно существует. Все, что мы можем сказать, это то, что одна из этих ссылок, вероятно, является нулевым значением - но это все еще предположение. Единственный способ убедиться в этом - использовать отладчик.
Arvi.S
Частично получил некоторые коды, погуглив его.Согласно вашему предположению, если ссылка имеет нулевое значение, как мне действовать дальше?
Richard MacCutchan
Выясните, почему ссылка равна нулю. Но лучшим предложением было бы изучить C#.
[no name]
У вас вообще нет никакой нулевой проверки во время чтения и итерации к объекту reader. Лучше вам вытащить данные считывателя в переменных и иметь некоторую нулевую проверку, реализованную перед тем, как вы будете работать с данными считывателя. Кроме того, если вы извлекаете нулевые данные из самой базы данных - это нужно исправить, если вы ожидаете значений всегда, а не null.