首页
技术库 |  站长工具 | 技术手册 |  字体库 |  知识点词汇表  |  联系我们 |   



主菜单


站点首页
技术手册
字体库
知识点 词汇表
站长工具
高级搜索
联系我们
站点地图

文章分类



文章内容 

当前位置: .: .Net技术 .: 问题集锦 .: asp.net中GridView实现DropDownList级联动
asp.net中GridView实现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详解
效果图示:
OK,大功告成,终于写完了,希望对大家有帮助。
老韩于07.12.12日




隐藏文章属性
文章编号:416
点击次数:1767
创建日期:12-12-2007
修改日期:12-12-2007
发布人:laohan
点评:
发送此文
发表评论
打印
添加到收藏夹


评级:




用户评论

此文章还没有任何评论!

网站地图 - 知识词汇 - 全文检索 - 广告服务 - 帮助中心 - 联系我们
.:www.cn-web.com
网站技术开发联盟之WEB开发技术知识库
联系人:老韩(QQ:5679551)
晋ICP备07003487号