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

时间:2014-10-20 13:02:46

标签: c# winforms

我这样做是为了我自己的学习。这不是家庭作业。我找到的所有例子都是针对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);

所以我怀疑使用这些组件我需要为每个表创建一个新数据集,但我不喜欢这样做,因为将来可能会创建新表。

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

1 个答案:

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