Arvi.S Ответов: 2

Отображение excel в listview при нажатии кнопки


У меня есть файл excel, который я читаю, инициализируя oledb. Я просто хочу отобразить прочитанный файл excel в виде списка.
Заранее спасибо за помощников!!

Что я уже пробовал:

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();
            Oledbcmd.CommandText = "Select SIGNAL,ROUTE_BUTTON from [CONTROL_TABLE$]";
            OleDbDataAdapter da = new OleDbDataAdapter(Oledbcmd);
            ContentTable = new DataTable();
            da.Fill(ContentTable);
            OleDbDataReader dr = Oledbcmd.ExecuteReader();
            ContentTable = null;
            
            dr.Close();
            Oledb.Close();
            Oledb.Dispose();
            return ContentTable;

        }

 private void t1NextTabRedirectButton_Click(object sender, EventArgs e)
        
            {
                string filePath = string.Empty;
                string fileExt = string.Empty;

                InitializeOledbConnection("C:\\gui_Files\\ICT_LAYOUT_AJJ.xlsx", ".xlsx");
                DataTable schemaTable = ReadFile();

               
                    routeNamesListView.Columns.Add("SIGNAL");
                    routeNamesListView.Columns.Add("ROUTE_BUTTON");
                    routeNamesListView.View = View.List;
                    routeNamesListView.CheckBoxes = true;
            }

Karthik_Mahalingam

вы получаете какую-нибудь ошибку?

Arvi.S

Я не получаю никаких ошибок.Когда я сохранил точку останова и отладку, в событии кнопки "DataTable schemaTable" есть нулевые значения.

Maciej Los

Что не так с вашим кодом? Улучшите свой вопрос и предоставьте более подробную информацию...

Arvi.S

Установил строку подключения в oledb для использования excel.
В следующей функции я читаю определенные столбцы листа из файла excel.
Чего я хочу, так это:
при нажатии на кнопку файл должен быть прочитан и отображен в виде списка.

2 Ответов

Рейтинг:
2

Pradeep Arthanari

Вы должны добавить тип вашей команды в качестве текстового типа(ниже строки) в вашем методе ReadFile() :

Oledbcmd.CommandText = "Select SIGNAL,ROUTE_BUTTON from [CONTROL_TABLE$]";
Oledbcmd.CommandType = CommandType.Text; 


Arvi.S

Добавлено, но эффекта нет!

Pradeep Arthanari

Вы можете попробовать это:


        public string connString;

        DataTable schemaTable;

        DataTable ContentTable;

        private void button1_Click(object sender, EventArgs e)
        {
            string filePath = string.Empty;
            string fileExt = string.Empty;

            string fileName = "D:\\00Latitude\\00InfyTFS\\Standard Interface\\ExcelRepository\\GPB 14-4-17.xls";

            connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
            DataTable schemaTable = ReadFile();
            

            routeNamesListView.Columns.Add("IPCNODEID");
            routeNamesListView.Columns.Add("IPC");
            for (int i = 0; i < schemaTable.Rows.Count; i++)
            {
                DataRow drow = schemaTable.Rows[i];

                // Only row that have not been deleted
                if (drow.RowState != DataRowState.Deleted)
                {
                    // Define the list items
                    ListViewItem lvi = new ListViewItem(drow[0].ToString());
                    for (int j = 1; j < schemaTable.Columns.Count; j++)
                    {
                        lvi.SubItems.Add(drow[j].ToString());
                    }
                    routeNamesListView.Items.Add(lvi);
                }
            }
            routeNamesListView.View = View.Details;
            routeNamesListView.CheckBoxes = true;

        }


        private DataTable ReadFile()
        {
            OleDbConnection conn = new OleDbConnection(connString);

            schemaTable = new DataTable();
            OleDbCommand Oledbcmd = new OleDbCommand();
            Oledbcmd.Connection = conn;
            conn.Open();
            Oledbcmd.CommandText = "Select IPCNODEID,IPC from [daily data$]";

            Oledbcmd.CommandType = CommandType.Text; //--------------

            OleDbDataAdapter da = new OleDbDataAdapter(Oledbcmd);
            ContentTable = new DataTable();
            da.Fill(ContentTable);
            OleDbDataReader dr = Oledbcmd.ExecuteReader();
            dr.Close();
            conn.Close();
            conn.Dispose();

            return ContentTable;

        } 

Arvi.S

Спасибо, Прадип!! Приведенный выше код работает хорошо. Но из двух столбцов в listview отображается только значение первого столбца(сигнал), а значение следующего столбца(ROUTE_BUTTON) не отображается.

Pradeep Arthanari

Проверьте, правильно ли заполнены значения ROUTE_BUTTON в schemaTable. Если он есть в schemaTable, он должен отображаться в списке, а также убедитесь, что у вас есть routeNamesListView.View установлен в положение View.Details.

routeNamesListView.View = View.Details;

Рейтинг:
1

Karthik_Mahalingam

удалите эту строку

ContentTable = null;


Arvi.S

Попробовал снять его.
Кроме того, я удалил "schemaTable = new DataTable" из функции read file, так как она никогда не используется.
Но никакого эффекта нет!

Karthik_Mahalingam

еще получаю null или пустой стол ?

Arvi.S

можно получить столбец, количество строк таблицы содержимого в функции DataTable ReadFile. Но те же самые значения таблицы содержимого не могли быть замечены в событии нажатия кнопки.

Примечание:
В кнопка событие, я поменял объект DataTable schemaTable = слотом ReadFile(); в DataTable ContentTable = слотом ReadFile();

Karthik_Mahalingam

пробовать

   string GetConnString(string path)
        {
            string connString = "";
            string extrn = Path.GetExtension(path);
            if (extrn == ".xlsx")
                connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + path + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1'"; //for above excel 2007
            else
                connString = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"; //for below excel 2007
            return (connString);
        }

        private DataTable ReadFile(string path)
        {
            DataTable dt = new DataTable();
            string conString = GetConnString(path);
            using (OleDbConnection con = new OleDbConnection(conString))
            {
                string query = "Select SIGNAL,ROUTE_BUTTON from [CONTROL_TABLE$]";
                OleDbCommand Oledbcmd = new OleDbCommand(query, con);
                OleDbDataAdapter da = new OleDbDataAdapter(Oledbcmd);
                da.Fill(dt);
            }
            return dt;

        }

        private void t1NextTabRedirectButton_Click(object sender, EventArgs e)
        {
            DataTable schemaTable = ReadFile("C:\\gui_Files\\ICT_LAYOUT_AJJ.xlsx"); 
        }

Arvi.S

Попробовал вышеприведенный код Mr. Karthick, но с той же проблемой я столкнулся.
Ошибок нет, но я не получил вывода.
Одну вещь я заметил при отладке вашего кода.
Количество столбцов и строк в da.Fill(dt) равно нулю.