C# c中具有OnItemDataBound属性的访问控制id#

C# c中具有OnItemDataBound属性的访问控制id#,c#,asp.net,C#,Asp.net,我有这个嵌套的数据列表 public void cmtdatabound(object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item) { DataList dl = e.Item.FindControl("dl_cmt") as DataList; string str = gstr; sq.connection();

我有这个嵌套的数据列表

public void cmtdatabound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item)
    {
        DataList dl = e.Item.FindControl("dl_cmt") as DataList;

        string str = gstr;
        sq.connection();
        SqlCommand cmd = new SqlCommand("select top 4 * from comment where sid='" + str + "' order by my_date desc", sq.con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);

        dl.DataSource = ds;
        dl.DataBind();
    }
}
编辑

<asp:DataList ID="mydatalist" DataKeyField="sid" ItemStyle-CssClass="lft_c_down"  runat="server">
   <ItemTemplate>
    <div class="wholeC">
    <div class="ctop">
    <div class="lft_l">
    <div class="lft_l_top">
    <asp:Image ID="Image1" runat="server" ImageUrl='<%#DataBinder.Eval(Container.DataItem,"ipath")%>' Height="245px" Width="297px" />
    <br/>
    </div>

    </div>
    <div class="lft_r">

    <asp:Label ID="lbl_sid" Text='<%#DataBinder.Eval(Container.DataItem,"sid") %>' runat="server" Visible="false" />
    <b class="products" >Product Name:</b>
    <asp:Label ID="lbl2" Text='<%#DataBinder.Eval(Container.DataItem,"ipath") %>' runat="server" />
    <br/>
    <b class="products">Brand:</b>
    <asp:Label ID="lbl1" Text='<%#DataBinder.Eval(Container.DataItem,"brand") %>' runat="server" />
    <br/>

    </div>
    </div>
    <div class="cdown">
    <asp:TextBox ID="tb_cmt" runat="server" Height="35px" Width="500px" placeholder="comment.."  />
    <asp:Button ID="Button1"  runat="server" Text="Comment" backcolor="black" BorderStyle="None" Font-Names="Consolas" Font-Overline="False" 
    ForeColor="White" Height="34px" Width="108px" OnClick="cmt_Click" />


<asp:DataList ID = "dl_cmt" runat="server">
    <ItemStyle CssClass="coment" />
    <ItemTemplate>
    <asp:Label ID="lblcmt" runat="server" Text='<%#Eval("ecomment")%>' />
    <asp:Label ID="lblDate" style=" color:brown; font-family:Cursive; font-size:x-small; " runat="server" Text='<%#Eval("my_date","on {0}") %>' />
    </ItemTemplate>
    </asp:DataList>
    <%--<asp:LinkButton ID="lb_showMore" runat="server">Show More</asp:LinkButton>--%>
    </div>
    </div>

    </ItemTemplate>
    </asp:DataList>

这里的
dl
为空,这意味着无法访问该id。如何在此处访问数据列表的id。

您可以将发送方参数用作
datalist
,如下所示:

 DataList dl = sender as DataList;

为什么循环永远不会结束函数
cmtdatabound
,因为您要在数据绑定事件上再次绑定数据列表。它进入无限循环。所以你必须在数据绑定事件之外绑定数据列表。。我可以在另一个函数中访问这个
dl
吗?比如说
myfun(){dl.datsource=ds;}
是的,你可以用它的ID直接访问这个控件。myfun(){dl\u cmt.datsource=ds;}实际上
dl\u cmt
是另一个数据列表中数据列表的ID…如果我可以直接访问它,我就不必使用
ondataitembound