使用下拉列表更改网格中加载的表

本文关键字:加载 网格 下拉列表 | 更新日期: 2023-09-27 18:27:13

我这样做是为了自己的学习。这不是在家工作。我找到的所有示例都是针对asp解决方案的。

我有一个网格Winform中的下拉列表网格具有数据集绑定源和表适配器。我用DB中的表填充dropdownlist,如下所示:

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);

因此,我怀疑有了这些组件,我会为每个表都需要一个新的数据集,但我不喜欢这样做,因为未来可能会创建新的表。

如何更改从下拉列表中选择表格的网格中加载的表格?

使用下拉列表更改网格中加载的表

数据集要求您指定在设计时可能要加载的表,但听起来您希望动态加载这些表(因为它们可能从另一个源添加到数据库中?)

如果我正确理解你的问题,你应该简单地这样做:

每当用户选择一个表时,使用动态查询加载所选的表,并将网格重新数据绑定到它。代码应该是这样的注意:这是未经测试的代码

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);
}