我这样做是为了我自己的学习。这不是家庭作业。我找到的所有例子都是针对asp解决方案的。
我在 Winform 中有 Grid 和 DropDownList 。 Grid 有一个 DataSet 一个 BindingSource 和一个 TableAdapter 。 我使用DB中的表填充下拉列表,如下所示:
public void FillDropDownList(string connString)
{
String Query = "SELECT * FROM information_schema.tables where Table_Name like 'Table%'";
using (var cn = new SqlConnection(connString))
{
cn.Open();
DataTable dt = new DataTable();
try
{
SqlCommand cmd = new SqlCommand(Query, cn);
SqlDataReader myReader = cmd.ExecuteReader();
dt.Load(myReader);
}
catch (SqlException e)
{
//to be completed
}
radDropDownList1.DataSource = dt;
radDropDownList1.ValueMember = "TABLE_NAME";
radDropDownList1.DisplayMember = "TABLE_NAME";
}
}
在网格中加载数据的行是这样的:
this.table_xxxTableAdapter.Fill(this.xxxDataSet.Table_xxx);
所以我怀疑使用这些组件我需要为每个表创建一个新数据集,但我不喜欢这样做,因为将来可能会创建新表。
如何从下拉列表中更改网格选择表中加载的表?
答案 0 :(得分:1)
DataSet要求您指定可能要在设计时加载的表,但听起来您想要动态加载这些表(因为它们可能会从其他来源添加到数据库中?)
如果我正确理解您的问题,您应该这样做:
每当用户选择一个表时,使用动态查询加载选定的表并将网格重新数据绑定到该表。代码看起来应该是这样的。 注意: 这是未经测试的代码。
protected void radDropDownList_OnSelectedIndexChanged(object sender, EventArgs e)
{
DataTable dt = new DataTable();
string query = BuildQuery(radDropDownList.SelectedValue); //Pass in the table name
using (var cn = new SqlConnection(connString))
{
cn.Open();
try
{
SqlCommand cmd = new SqlCommand(query, cn);
using (var da = new SqlDataAdapter(cmd))
{
ad.Fill(dt);
}
}
catch (SqlException e)
{
//TODO: Handle this exception.
}
}
radGrid.DataSource = dt;
radGrid.DataBind();
}
private string BuildQuery(string table)
{
//TODO: Provide your own implementation for your query.
return string.Format(
@"SELECT * FROM {0}", table);
}