【问题标题】:Fill combo box from access table c#从访问表c#中填充组合框
【发布时间】:2017-08-03 18:07:24
【问题描述】:

我来自 VB.net,我正在努力学习 C#,所以我现在使用 C# 而不是 Vb.net 来编写我的应用程序。

我正在尝试用访问表中的一些数据填充组合框,但我在 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 语法中使用几乎相同的语法,它完美地工作

【问题讨论】:

标签: c# ms-access visual-studio-2012


【解决方案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);
            }

【讨论】:

    【解决方案2】:

    DataTableCollection 没有公共构造函数,所以不能实例化它。在您的情况下,您不需要它,请将您的代码更改为:

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

    【讨论】:

    • 感谢 Gusman,这确实解决了我的问题,这似乎是一个非常简单的错误。我还注意到我在下面的代码中仍然有错误,现在我已经更正了,因为我正在为我自动完成的文本框复制这段代码,但这次我实际上只是想填充组合框。
    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多