2017-08-03 170 views
0

我來自VB.net,我試圖學習C#,所以我正在編程我的應用程序現在在C#而不是Vb.net。從訪問表c填充組合框#

我想填充組合框中的一些數據,我有一個訪問表,但我的代碼在vb.net工作,似乎並沒有在C#中表現相同。任何人都可以幫我找出爲什麼這不起作用嗎?

try 
{ 
    //string turno = "1"; 
    //fillnames(turno); 

    OleDbConnection conn = new OleDbConnection(); 
    conn.ConnectionString = @"Provider= Microsoft.ACE.OLEDB.12.0; Data Source=path.accdb;"; 

    DataSet ds = new DataSet(); 
    DataTableCollection tables = new DataTableCollection(); 
    OleDbDataAdapter da = new OleDbDataAdapter(); 
    tables = ds.Tables; 
    da = new OleDbDataAdapter("SELECT [Materialista] FROM [OPS] WHERE [Turno] = '" + "1" + "'", conn); 
    da.Fill(ds, "Ops"); 

    AutoCompleteStringCollection col = new AutoCompleteStringCollection(); 

    for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
    { 
     col.Add(ds.Tables[0].Rows[i]["Dnum"].ToString()); 
    } 

    cmb_operador.AutoCompleteSource = AutoCompleteSource.CustomSource; 
    cmb_operador.AutoCompleteCustomSource = col; 
    cmb_operador.AutoCompleteMode = AutoCompleteMode.Suggest; 

} 
catch 
{ 
} 

我得到的錯誤是:

類型System.Data.DataTableCollection有沒有構造函數定義

我用幾乎相同的只是在vb.net的語法和它作品完美無缺

+0

的可能的複製[C# - 裝滿一個DataTable的組合框(https://stackoverflow.com/questions/256832/c-sharp-fill-a-combo-box-with-a-datatable ) – MethodMan

回答

0

DataTableCollection沒有公共構造函數,所以你不能實例化它。而在你的情況,你不需要它,你的代碼改成這樣:

//... 
//remove DataTableCollection tables = new DataTableCollection(); 
OleDbDataAdapter da = new OleDbDataAdapter(); 
DataTableCollection tables = ds.Tables; 
//... 
+0

感謝古斯曼,這真的解決了我的問題,這似乎是一個非常簡單的錯誤。此外,我注意到,我仍然在代碼中發現錯誤,現在我已經更正了代碼,因爲我在複製此代碼的文本框時我自動完成,但實際上我只是想要填充組合框。 – Demandread

1

我會用這個答案附更正後的代碼爲我想做的事,使用@Gusman建議,在任何情況下,有任何用處。

try 
      { 
       //string turno = "1"; 
       //fillnames(turno); 

       OleDbConnection conn = new OleDbConnection(); 
       conn.ConnectionString = @"Provider= Microsoft.ACE.OLEDB.12.0; Data Source=path.accdb;"; 

       DataSet ds = new DataSet(); 

       OleDbDataAdapter da = new OleDbDataAdapter(); 
       DataTableCollection tables = ds.Tables; 
       da = new OleDbDataAdapter("SELECT [Materialista] FROM [OPS] WHERE [Turno] = '" + "1" + "'", conn); 
       da.Fill(ds, "Ops"); 

       AutoCompleteStringCollection col = new AutoCompleteStringCollection(); 

       for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) 
       { 
        col.Add(ds.Tables[0].Rows[i]["Materialista"].ToString()); 
       } 

       cmb_operador.DataSource = col; 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      }