0

在我的应用程序中,我编写了一个主查询,例如

 SqlDataAdapter cmd0 = new SqlDataAdapter(select a,b,c,d, from table1,sqlconn)

然后我缓存了这个查询,因为 table1 是一个非常大的表,我不想每次用户进行一些更改时都调用数据库。

        DataSet ds0 = new DataSet();
        cmd0.Fill(ds0);
        DataView source0 = new DataView(ds0.Tables[0]);
        DataTable dt0 = new DataTable();
        cmd0.Fill(dt0);
        Cache["data"] = ds0;

我有 2 个 a 和 b 的下拉列表。我得到缓存列 a 并绑定下拉列表中的数据

 //dropdown for a
        DataSet dataset_a = new DataSet();
        dataset_a = (DataSet)Cache["data"];
        DataView dataview_a = dataset_a.Tables[0].DefaultView;
        dataview_a.Sort = "a";
        DataTable datatable_a = dataview_a.ToTable(true, "a");
        ddla.DataSource = datatable_a;
        ddla.DataTextField = "a";
        ddla.DataValueField = "a";
        ddla.DataBind();

现在我尝试以与 ddla 相同的方式填充 b 的下拉列表

//dropdown for b
        DataSet dataset_b = new DataSet();
        dataset_b = (DataSet)Cache["data"];
        DataView dataview_b = dataset_b.Tables[0].DefaultView;
        dataview_b.Sort = "b";
        DataTable datatable_b = dataview_b.ToTable(true, "b");
        ddlb.DataSource = datatable_b;
        ddlb.DataTextField = "b";
        ddlb.DataValueField = "b";
        ddlb.DataBind();

当我在 ddla(dropdownlist for a) 中更改我的选择时,我希望 b 的下拉列表也可以更改。(级联下拉列表)

所以基本上我想触发这样的查询:

Select b from table1 where a=ddla.SelectedItem.ToString()

但我不知道如何处理缓存的数据。

请帮我!谢谢!!!

4

1 回答 1

1

您不能绑定到相同的源并期望获得您正在寻找的结果。要得到你想要的,你需要 unbind ddlb。相反,在事件SelectedIndexChanged或您应该过滤数据表SelectedItemChangedddla的行并加载到ddlb. 实际上有几种方法可以做到这一点。一,是在数据集中有2个表并使用关系,一个组合绑定到表a,另一个绑定到表b。这样,当您单击 时a,相关行将显示在b

于 2013-06-21T17:23:54.220 回答