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/