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/