3

我有一个 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;
                }
            }

        }
    }
4

1 回答 1

1

在 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");
于 2013-07-30T12:48:52.930 回答