繁体   English   中英

如何从数据库加载ComboBox列表?

[英]How do I load the list of a ComboBox from the database?

我有一个sql语句,但我不知道如何实现它所以我可以用它来填充winforms应用程序中的组合框。

这是我以前的应用程序中的方式:

<asp:SqlDataSource ID="Sections" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnection%>" 
            SelectCommand="SELECT e.DisplayName,  e.ID , e.GUID
            FROM ATable e
            INNER JOIN RootTable re
            ON e.ID = re.TablesID
            AND re.InitID = 1">
</asp:SqlDataSource>

我怎样才能改变它以适应winforms组合框

---- 更新 ----

在实现以下建议后:我在编译时遇到错误,声明该方法必须是非泛型静态类。

码:

public partial class InfoGet : Form
    {
        public InfoGet()
        {
            InitializeComponent();
        }
        static string conString = "Data Source=.;Initial Catalog=MyConnection;Integrated Security=True";
        public static void FillDropDownList(this ComboBox sections_drp, string conString)
        {
            using (SqlConnection con = new SqlConnection(conString))
            {
                con.Open();
                using(SqlDataAdapter sda = new SqlDataAdapter("SELECT....", conString))
                {
                    DataTable dt = new DataTable();
                    sda.Fill(dt);

                    sections_drp.ValueMember = "ID";
                    sections_drp.DisplayMember = "DisplayName";
                    sections_drp.DataSource = dt;
                }
            }

        }
    }

在Windows窗体应用程序中,您需要在代码中获取它,或者至少这是我要推荐的内容。 一种可能的方法是:

using (SqlConnection cnn = new SqlConnection(connString))
{
    cnn.Open();
    using (SqlDataAdapter sda = new SqlDataAdapater("SELECT e.DisplayName,  e.ID , e.GUID FROM ATable e INNER JOIN RootTable re ON e.ID = re.TablesID AND re.InitID = 1", cnn))
    {
        DataTable dt = new DataTable();
        sda.Fill(dt);

        comboBox.ValueMember = "ID";
        comboBox.DisplayMember = "DisplayName";
        comboBox.DataSource = dt;
    }
}

现在,要使此代码可重用,您可以构建一个这样的扩展方法:

namespace System.Windows.Forms
{
    public static class ComboBoxExtensions
    {
        public static void Load(this ComboBox comboBox, string sql, string valueMember, string displayMember)
        {
            using (SqlConnection cnn = new SqlConnection(connString))
            {
                cnn.Open();
                using (SqlDataAdapter sda = new SqlDataAdapater(sql, cnn))
                {
                    DataTable dt = new DataTable();
                    sda.Fill(dt);

                    comboBox.ValueMember = valueMember;
                    comboBox.DisplayMember = displayMember;
                    comboBox.DataSource = dt;
                }
            }
        }
    }
}

使用该扩展方法,它将非常容易使用:

comboBox.Load("SELECT e.DisplayName,  e.ID , e.GUID FROM ATable e INNER JOIN RootTable re ON e.ID = re.TablesID AND re.InitID = 1",
    "ID",
    "DisplayName");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM