天天看点

[原创]用SqlDataSource实现DropDownList的二级联动

SqlDataSource 是为我这种懒人设计的,我觉得~~~

它只需要指定连接串和SQL语句,就可以轻松实现控件的数据绑定。

想做一个二级联动的下拉列表,又不想写代码……所以就想方设法用这个SqlDataSource了~~~

(AccessDataSource和XmlDataSource之类的……触类旁通吧)

思路:

    二级联动,事实就是在第一个下拉列表选择了某项之后,第二个下拉列表根据这个选项来显示下一级的内容……从数据库方面说,就是先把第一个列表的内容显示出来,然后返回一个选择的值,再根据这个值去查第二个列表的内容……

网上应该有不少解法的,但是用SqlDataSource的可能就少了……

XX.aspx

...

<!-- 一级列表start -->

<asp:DropDownList

  ID="BoardList"

  DataSourceID="BoardSource"

  runat="server"

  DataTextField="board_Name"

  DataValueField="board_ID"

  AutoPostBack="true"></asp:DropDownList>

<asp:SqlDataSource

  ID="BoardSource"

  runat="server"

  ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

  SelectCommand = "select board_ID, board_Name from LinkBoard"></asp:SqlDataSource>

<!-- 一级列表end -->

<!-- 二级列表start -->

<asp:DropDownList

   ID="ClsList" runat="server" ></asp:DropDownList>

<asp:SqlDataSource

  ID="ClsSource"

  runat="server"

  ConnectionString="<%$ ConnectionStrings:ConnectionString %>"></asp:SqlDataSource>

<!-- 二级列表end -->

...

注:这里第二级列表貌似不可以直接就写绑定的参数,不然无论第一级怎么去PostBack,它都是没有反应,我怀疑它是绑好了就不更新了~~~

XX.aspx.cs

Page_Load()

{

        int bid;

        try

        {

            bid = Int32.Parse(BoardList.SelectedValue); //简单处理一下参数,不过好像意义不太大

        }

        catch { bid = 0; }

        ClsSource.SelectCommand = "Select Cls_ID, Cls_Name FROM LinkCls WHERE Cls_Board = " + bid;

        ClsList.DataSourceID = "ClsSource";

        ClsList.DataTextField="Cls_Name";

        ClsList.DataValueField = "Cls_ID";

        ClsList.DataBind();

...

}

核心代码如上,应该思路还是很清晰的~~~