2012-01-18 2 views
0

Привет у меня есть лист первенствовать с заголовками, я хочу, чтобы заполнить эти заголовки в выпадающий список ...Как заполнить имена excelsheetcloumn в выпадающем списке?

может ли один помочь мне с отборного заявления и процедуры

Я работаю на коде ДНТ знаю, я ли его правильно или нет

 DropDownList list = new DropDownList(); 
        string connectionstring = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", Excelpath); 
        string query1 = String.Format("select * from [{0}]", DDlist.SelectedItem.Text);            
        // OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query1, connectionstring);             
        using (OleDbConnection conn1 = new OleDbConnection(connectionstring)) 
        { 
         OleDbCommand odc1 = new OleDbCommand(string.Format(query1, conn1)); 
         conn1.Open(); 
         OleDbDataReader dr; 
         dr = odc1.ExecuteReader(); 
         while (dr.Read()) 
         { 
          list.Items.Add(dr[column.ColumnName].ToString()); 
         } 
         dr.Close(); 
         conn1.Close(); 
        } 

в этом методе я адресности ошибку на этой линии

dr = odc1.ExecuteReader();Error:ExecuteReader: Connection property has not been initialized. 

ча n любая помощь mw с этим, спасибо заранее

+0

попробовать «OleDbCommand odc1 = новый OleDbCommand (Query1, conn1);» – Nalaka526

+0

throwing errot at "list.Items.Add (dr [column.ColumnName] .ToString());" "System.IndexOutOfRangeException: CUSTOMER_ID" ... @ Nalaka526 –

ответ

0

попробовать это может работать .....

    foreach (DataTable table in DS.Tables) 
      { 
       foreach (DataColumn column in table.Columns) 
       { 
        DropDownList list = new DropDownList(); 
        string connectionstring = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", Excelpath); 
        string query1 = String.Format("select * from [{0}]", DDlist.SelectedItem.Text);                  
        using (OleDbConnection conn1 = new OleDbConnection(connectionstring)) 
        { 
         OleDbCommand odc1 = new OleDbCommand(query1, conn1); 
         conn1.Open(); 
         DataTable dte = null; 
         DataSet ds = new DataSet(); 
         dte = conn1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
         OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); 
         objAdapter1.SelectCommand = odc1; 
         objAdapter1.Fill(ds, "xldata"); 
         for (int i = 0; i < ds.Tables[0].Columns.Count; i++) 
         { 
          list.Items.Add(ds.Tables[0].Columns[i].ColumnName.ToString()); 
         } 
         conn1.Close(); 
        } 
+0

Я думаю, что это лучше подходит для моего ответа из всех ответов .. спасибо @ Анил –

0

Я думаю, что вы не проходите Подключение к OleDBCommand. Так что попробуйте,

OleDbCommand odc1 = new OleDbCommand(query1, conn1); 
+0

Я пропустил эту команду, не работает, см. Мой код –

0

OleDbCommand класс имеет два основных параметра, которые передаются для надлежащего исполнения. Это объект запроса и подключения. В вашем коде вы передаете соединение, но оно помещено внутри String.Format(), поэтому поместите его снаружи. Смотрите ниже код ....

OleDbCommand odc1 = new OleDbCommand(string.Format(query1, conn1)); 

К

OleDbCommand odc1 = new OleDbCommand(query1, conn1); 
+0

throwing errot at "list.Items.Add (dr [column.ColumnName] .ToString());" "System.IndexOutOfRangeExcept ion: CUSTOMER_ID" ... –

+0

- мой метод правильный ..... и выберите оператор –

+0

Выбранный оператор немного большой, выберите только столбец из таблицы. Перейдите по этой ссылке, чтобы выбрать только столбцы http://stackoverflow.com/questions/452464/how-can-i-get-column-names-from-a-table –