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 フォーム アプリケーションでは、それをコードで取得する必要があります。少なくとも、それをお勧めします。1 つの可能なアプローチは次のとおりです。

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 に答える