从访问表c填充组合框#

问题描述:

我来自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

DataTableCollection没有公共构造函数,所以你不能实例化它。而在你的情况,你不需要它,你的代码改成这样:

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

感谢古斯曼,这真的解决了我的问题,这似乎是一个非常简单的错误。此外,我注意到,我仍然在代码中发现错误,现在我已经更正了代码,因为我在复制此代码的文本框时我自动完成,但实际上我只是想要填充组合框。 – Demandread

我会用这个答案附更正后的代码为我想做的事,使用@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); 
      }