【问题标题】:How to fill combobox with database values using n tier architecture in c# windows form如何在 c# windows 窗体中使用 n 层架构用数据库值填充组合框
【发布时间】:2019-01-11 17:43:27
【问题描述】:

我编写代码用数据库值填充组合框。如果此代码写在表示层上,我的代码工作正常。但我想在数据层上写这段代码。我的解决方案中有 3 个项目(UI、BLL、DAL)。我想要这个代码在 DAL 中,然后在 BLL 的帮助下调用 UI。怎么做。请帮我。这是我的代码。

如何将我的代码转换为 3 层架构。

using (SQLiteConnection conn = new SQLiteConnection(EmployeeComboFills.ecbconn()))
            {
                string CommandText = "SELECT Name FROM User";
                using (SQLiteCommand cmd = new SQLiteCommand(CommandText, conn))
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    DataTable dt = new DataTable();
                    SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
                    da.Fill(dt);
                    foreach (DataRow dr in dt.Rows)
                    {
                        CELD_employeename.Items.Add(dr["Name"].ToString());
                    }
                }
            }

如何在 3 层中编写此代码。或者,如果有人有更好的代码,请分享。谢谢。

【问题讨论】:

  • cmd.ExecuteNonQuery(); 在 Select 查询中?
  • CELD_employeename.DisplayValue = "Name"; CELD_employeename.DataSource = dt;
  • 一个组合框需要为每个组合框条目设置两个属性:一个值(通常是数据库主键)和一个显示名称(一个名称、描述符、查找表的字符串)。您如何检索这些值以及如何使用它们来填充 ComboBox 通常是次要的。但我猜你希望有一些自动/帮助代码为你做这件事(这不是一个坏主意)。

标签: c# database winforms sqlite data-binding


【解决方案1】:

不要直接将项目添加到组合框,而是将它们添加到列表中。假设EmployeeComboFills是你的静态DAL类,你可以把这个方法加进去

public static List<string> GetUserNames()
{
    string CommandText = "SELECT Name FROM User ORDER BY Name";
    using (SQLiteConnection conn = new SQLiteConnection(ecbconn()))
    using (SQLiteCommand cmd = new SQLiteCommand(CommandText, conn))
    {
        conn.Open();
        DataTable dt = new DataTable();
        SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
        da.Fill(dt);
        return dt.Rows
            .Cast<DataRow>()
            .Select(dr => dr["Name"].ToString())
            .ToList();
    }
}

然后您可以将其分配给组合框

CELD_employeename.DataSource = EmployeeComboFills.GetUserNames();

【讨论】:

  • 我收到此行的错误“return dt.Rows .Select(dr => dr["Name"].ToString()) .ToList()”
  • 显然 Rows 集合没有实现IEnumerable&lt;DataRow&gt;,因此我不得不添加.Cast&lt;DataRow&gt;()
  • 组合框没有任何价值。
  • 我做了一个简单的测试:comboBox1.DataSource = new List&lt;string&gt; { "aaa", "bbb", "ccc" };。这对我有用。组合框的DisplayMemberValueMember 必须为空。还使用 SqlServer 版本测试了 GetUserNames()。作品。进行测试和调试。
猜你喜欢
  • 2011-11-17
  • 1970-01-01
  • 2016-03-26
  • 2011-01-16
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多