asp.net中实现DetailsView控件下的两个DropDownList级连变动

http://www.cnblogs.com/dreampeng007/archive/2007/12/03/980965.html

 

做项目中,一直在用DetailsView控件在显示数据库表的详细数据,今天遇到了这种情况,用DetailsView显示数据时,如果单击编辑,需要显示乡和村这两个下拉列表,单击乡时,村需要与之对应。
 
解决思路:
在DetailsView控件中分别为乡和村增加两个模板列,在两个模板列的EditItemTemplate下均增加两个控件,分别为 HiddenField和DropDownList,HiddenField用来记录当前数据库中乡(或者村)的编号,DropDownList用来显示 乡(或者村)的数据,这个数据需要在用户单击编辑时根据用户所编辑的信息来动态绑定的,所以这个代码应当写到DetailsView控件里的 ModeChanging事件里,乡和村的级连很简单,和在页中实现的原理一样,将乡的DropDownList控件的属性AutoPostBack设置 为true,增加OnSelectedIndexChanged事件就可以了。
 
部分代码:
DetailsView:
<asp:TemplateField HeaderText="乡名">
                                            <EditItemTemplate><asp:HiddenField ID="HDXiang" runat="server" Value='<%#Bind("乡名")  %>' /><asp:DropDownList ID="DDXiangz" runat="server" Width="90px"  AutoPostBack="true" OnSelectedIndexChanged="ddlXiang_SelectedIndexChanged"/></EditItemTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="Label1" runat="server" Text='<%#getXiangName(Eval("乡名").ToString()) %>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField HeaderText="村名">
                                           <EditItemTemplate><asp:HiddenField ID="HDCun" runat="server" Value='<%#Bind("村名")  %>' /><asp:DropDownList ID="DDlCun" runat="server" Width="90px" /></EditItemTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="Label2" runat="server" Text='<%#  getCunName(Eval("村名").ToString())%>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
 
ModeChanging事件:
  if (e.NewMode == DetailsViewMode.Edit)
        {
            //绑定乡,从DetailsView控件中寻找,我的DropDownList乡在第三行
            DropDownList DDXiang = (DropDownList)this.DetailsView1.Rows[2].Cells[1].Controls[0].FindControl("DDXiangz");
            DDXiang.DataSource = 您的数据源;
            DDXiang.DataTextField = "乡名";
            DDXiang.DataValueField = "编号";
            DDXiang.DataBind();
            //  选中乡的 DropDownList
            DDXiang.SelectedValue = ((HiddenField)this.DetailsView1.Rows[2].Cells[1].FindControl("HDXiang")).Value;

            //绑定村,从DetailsView控件中寻找,我的DropDownList村在第四行
            DropDownList DDCun = (DropDownList)this.DetailsView1.Rows[3].Cells[1].Controls[0].FindControl("DDlCun");
            DDCun.DataSource = 您的数据源;
            DDCun.DataTextField = "村名";
            DDCun.DataValueField = "编号";
            DDCun.DataBind();
            //  选中村的 DropDownList
            DDCun.SelectedValue = ((HiddenField)this.DetailsView1.Rows[3].Cells[1].FindControl("HDCun")).Value;
        }
 
/// <summary>
    /// 编辑时村随着乡变化
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void ddlXiang_SelectedIndexChanged(object sender, EventArgs e)
    {
        //绑定村
        DropDownList DDCun = (DropDownList)this.DetailsView1.Rows[4].Cells[1].Controls[0].FindControl("DDlCun");
        DropDownList DDXiang = (DropDownList)this.DetailsView1.Rows[3].Cells[1].Controls[0].FindControl("DDXiangz");
        DDCun.DataSource = mycom您的数据源;
        DDCun.DataTextField = "村名";
        DDCun.DataValueField = "编号";
        DDCun.DataBind();
    }
 
效果图:






文章来源(WEB开发技术知识库):http://www.cn-web.com/cnweb/0/385/article/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值