如何动态绑定DataList 的EditItemTemplate中的控件DropDownList

    技术2022-05-20  56

    今天遇到这么个情况

    需要访问DataList中EditItemTemplate中的控件,并给这个控件动态绑定另外一个表中的数据

    最初总是无法访问

    查阅MSDN,我注意到DataListe的这几个方法有点相关

     

    OnItemCommand

    ItemCommand 事件在单击 DataList 控件中的任一按钮时引发,并且当您具有在 DataList 控件中有自定义 CommandName 值(如Add)的按钮控件时通常使用它。

     

    OnItemCreated

    当创建 DataList 控件中的项时(不论是在往返行程中还是在将数据绑定到控件时),都会引发 ItemCreated 事件。

    ItemCreated 事件通常用于控制 DataList 控件中行的内容和外观。

     

    OnItemDataBound

    当项被数据绑定到 DataList 控件后,将引发 ItemDataBound 事件。此事件为您提供了在客户端显示数据项之前访问该数据项的最后机会。当引发此事件后,该数据项不再可用。

     

    后来采用OnItemDataBound事件,试验成功。

    数据库结构:

    student表

    id   uname     uclass

     

    class表

    id   classNum className

    代码部分:

     

    <asp:DataList ID="DataList1" runat="server" OnEditCommand="DataList_EditCommand" OnItemDataBound="Item_Bound"> <ItemTemplate> <div> <asp:LinkButton ID="LinkButton1" CommandName="Edit" runat="server">编辑</asp:LinkButton> <%#Eval("uname") %> <%#Eval("uclass") %> </div> </ItemTemplate> <EditItemTemplate> <div> <asp:LinkButton ID="LinkButton2" CommandName="Update" runat="server">更新</asp:LinkButton> <asp:LinkButton ID="LinkButton3" CommandName="Cancle" runat="server">取消</asp:LinkButton> <%#Eval("uname") %> <asp:DropDownList ID="DropDownList1" runat="server"> </asp:DropDownList> </div> </EditItemTemplate> </asp:DataList>  

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { bindData(); } } private void bindData() { DataSet ds = DB.reDs("select * from [student]", "tablestu"); DataTable dt=ds.Tables["tablestu"]; DataList1.DataSource = dt; DataList1.DataBind(); } private DataTable bindData2() { DataSet ds2 = DB.reDs("select * from [class]", "tableclas"); DataTable dt2 = ds2.Tables["tableclas"]; return dt2; } protected void DataList_EditCommand(Object source, DataListCommandEventArgs e) { DataList1.EditItemIndex = e.Item.ItemIndex; DataList1.DataKeyField = "id"; bindData(); } protected void Item_Bound(Object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.EditItem) { DropDownList dropl = (DropDownList)e.Item.FindControl("DropDownList1"); dropl.DataSource = bindData2(); dropl.DataTextField = "className"; dropl.DataValueField = "classNum"; dropl.DataBind(); } } 

     


    最新回复(0)