gridview中连个dropdownlist联动

gridview中连个dropdownlist联动
2008-08-18 09:47

asp.netGridView实现DropDownList级联动

前几天写过文章,介绍了如何在DetailsView控件里实现DropDownList的联动,有人问我如何在GridView中来实现呢,今天我简单介绍办法:

--------------------------------------------------------------------------------

首先还是为GridView控件增加两个模板列用来存放实现联动的DropDownList

<asp:TemplateField HeaderText="">

<EditItemTemplate><asp:HiddenField ID="HDXiang" runat="server" Value='<%#Bind("地点_") %>' /><asp:DropDownList ID="DDXiangz" runat="server" Width="90px" AutoPostBack="true" OnSelectedIndexChanged="ddlXiang_SelectedIndexChanged2"/></EditItemTemplate>

<ItemTemplate>

<asp:Label ID="Label12" runat="server" Text='<%#Eval("地点_") %>'></asp:Label>

</ItemTemplate>

</asp:TemplateField>

   <asp:TemplateField HeaderText="">

     <EditItemTemplate><asp:HiddenField ID="HDCun" runat="server" Value='<%#Bind("地点_") %>' /><asp:DropDownList ID="DDlCunz" runat="server" Width="90px" /></EditItemTemplate>

<ItemTemplate>

<asp:Label ID="Label24" runat="server" Text='<%# Eval("地点_")%>'></asp:Label>

    </ItemTemplate>

</asp:TemplateField>

小解:

我这里做的是乡和村的联动。在两个模板列的编辑模板下分别增加了HiddenField 控件,这里用来记录当前数据库中存放的乡和村的值记录,当用户单击编辑时通过它们来设置DropDownList 的默认选项。

乡的OnSelectedIndexChanged事件是来处理乡变化时村也随之联动,注,AutoPostBack需要设置为true.

OK, 再看下.cs文件里实现,这里主要涉及到两个事件OnSelectedIndexChanged事件和RowDataBound事件,一个一个看吧:

RowDataBound

protected void GVData_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        commonData mycd = new commonData();

        if (((DropDownList)e.Row.FindControl("DDLxz")) != null)

        {

            //绑定乡

            DropDownList DDXiang = (DropDownList)e.Row.FindControl("DDXiangz");

            DDXiang.DataSource =您的乡数据源,从数据库读取;

            DDXiang.DataTextField = "乡名";

            DDXiang.DataValueField = "编号";

            DDXiang.DataBind();

            // 通过HiddenField选中现在的 DropDownList的值

           DDXiang.SelectedValue = ((HiddenField)e.Row.FindControl("HDXiang")).Value;

            //绑定村

            DropDownList DDCun = (DropDownList)e.Row.FindControl("DDlCunz");

            DDCun.DataSource = 您的村数据源,从数据库读取;

            DDCun.DataTextField = "村名";

            DDCun.DataValueField = "编号";

            DDCun.DataBind();

            // 通过HiddenField选中现在的 DropDownList的值

            DDCun.SelectedValue = ((HiddenField)e.Row.FindControl("HDCun")).Value;

        }

小解:

这个是针对我的GridView控件的RowDataBound事件来说的,当行数据绑定时进行动态绑定乡和村和DropDownList(从数据库中读取数据)。

OK,实现了乡和村的数据绑定后,我们看下它们的级联动问题(当单击编辑时,乡改变时动态获取与之对应的村的数据)

OnSelectedIndexChanged

/// <summary>

    /// 编辑时村随着乡变化

    /// </summary>

    /// <param name="sender"></param>

    /// <param name="e"></param>

    public void ddlXiang_SelectedIndexChanged2(object sender, EventArgs e)

    {

        DropDownList DDXiang= (DropDownList)sender;//获取现在的事件触发者:乡的DropDownList

        GridViewRow gvr = (GridViewRow)DDXiang.NamingContainer;//乡与村同属于在一个NamingContainer

        DropDownList DDCun = (DropDownList)gvr.FindControl("DDlCunz");//找到村的DropDownList

        DDCun.DataSource = getCommon_cun(DDXiang.SelectedValue).Tables[0].DefaultView;//这个函数是我自定义的,通过乡的编辑取得与之对应的村的数据集

        DDCun.DataTextField = "村名";

        DDCun.DataValueField = "编号";

        DDCun.DataBind();

    }

小解:

上述关键是找到当前要操作的乡的DropDownList和村的DropDownList,乡的DropDownList好找,可以通过sender获取,与之对应的村的DropDownList因为与乡的DropDownList同属于在一个NamingContainer下,所以也可以找到它,这样就可以通过乡的DropDownList编号对村的DropDownList实现数据绑定了。

关于NamingContainer我也写过文章介绍,详情请查看《asp.net中的NamingContainer详解》

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值