[英]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.