现在有两个嵌套的DataList,有没有办法从内层的DataList控件的ItemDataBind事件中得到自身的引用?

解决方案 »

  1.   

    我要获取DataKeys总不能写成(Datalist)send.DataKeys[e.Item.ItemIndex]吧!
      

  2.   

    比如在外层的DataList的,我可以在ItemDataBind事件中用
    DataList1.DataKeys[e.Item.ItemIndex]来获取我绑在DataKeyField属性上的值.
    然而在页面上我无法直接访问被包含在DataList1的一个项中的DataList控件.如果我要象在最外层DataList那样取得DataKeys中的值,是否可以在内层DataList控件ItemDataBind事件中这样写:
        protected void DataList2_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            string s;
            s = ((DataList)sender).DataKeys[e.Item.ItemIndex].ToString();
        }
      

  3.   

    我也遇到类似问题,<asp:DataList ID="DataList8" runat="server" OnItemCommand ="datalist8_select" Height="117px" Width="553px" RepeatColumns="1" RepeatDirection="Horizontal"  DataKeyField ="id" style="height: 100%">
    <ItemTemplate>
       <asp:Image ID="Image7" ImageUrl ='<%#databinder.eval(container.dataitem,"imageurl")%>'  runat="server" /><br />
                                                    
      <asp:DataList ID="DL8_SubDataList" OnItemCommand ="DL8_SubDatalist_Select" runat="server"  RepeatDirection ="Horizontal" RepeatColumns =3 DataKeyField ="id" Width="533px" Height="75px" HorizontalAlign="Left" CaptionAlign="Left" style="text-align: left">
                                                            <itemtemplate>                                                        
               <table cellpadding =10 style ="font :status-bar ">
         <tr>
         <td valign =top >
          <asp:Image ID="imagetemp1" ImageUrl ='<%#databinder.eval(container.dataitem,"imageurl")%>' runat =server />
          </td>
        <td style="font-size: 9pt">
        <%#DataBinder.Eval(Container.DataItem,"name")%>
         <br/>
       <%#DataBinder.Eval(Container.DataItem, "price", "{0:c}")%>
        <br/>
                                                                            <asp:ImageButton ID="ImageBu1"  CommandName ="select" ImageUrl ="~/image/buy.gif" runat =server  />
                                                                        </td>
                                                                    </tr>
                                                                </table>
                                                            </ItemTemplate>
                                                        </asp:DataList>
                                                    </ItemTemplate>
                                                </asp:DataList>
    事件代码
    Sub DL8_SubDatalist_Select(ByVal sender As Object, ByVal e As DataListCommandEventArgs)
            sqlconn.Open()
     Dim i As Integer = CInt(DL8_SubDatalist.DataKeys(e.Item.ItemIndex))
    就是这句"Dim i As Integer = CInt(DL8_SubDatalist.DataKeys(e.Item.ItemIndex))" 为什么老是说未声明名称"DL8_SubDatalist" 是不是因为DL8_SubDatalist嵌套在Datalist8中的原因?
      

  4.   

    今天试了一下,可以写成string id=((DataList)sender).DataKeys[e.Item.ItemIndex].toString();
    问题解决了!