我如何引用嵌套在另一个listview控件的itemtemplate中的listview控件?

时间:2012-03-16 20:28:42

标签: c# asp.net listview findcontrol

我有一个listview控件嵌套在另一个listview控件的项模板中,我试图在代码隐藏中使用.FindControl()方法引用它,但它一直返回null。让它工作后,我需要在内部列表视图中引用一个ComboBox。这是我到目前为止的地方:

ListView lsvTickets
   ItemTemplate
        Listview lsvActions
             ItemTemplate
                  ComboBox cboAssignees

我正在使用以下代码在后面的代码中尝试引用:

var actions = (RadListView)lsvTickets.FindControl("lsvActions");

但是这会返回null。我以为我只需要做这样的事情来达到最终的预期结果:

var assignees = (RadComboBox)lsvTickets.FindControl("lsvActions").FindControl("cboAssignees")

有人可以帮忙吗?我在这做错了什么?以下是适合您的人的完整布局:

<rad:RadListView runat="server" ID="lsvTickets">
        <ItemTemplate>
            <div id="divContainer" class="divContainer">
                <div id="divTicketHeader" class="divTicketHeader">
                    <asp:Table runat="server" ID="tblTicketHead" Width="100%" CellSpacing="0" CellPadding="5" HorizontalAlign="Center">
                        <asp:TableRow HorizontalAlign="Center">
                            <asp:TableCell  Width="25%">
                                <asp:Label ID="Label1" runat="server" Text='<%#Eval("Subject") %>' Font-Bold="true" />
                            </asp:TableCell><asp:TableCell Width="25%">
                                <asp:Label ID="Label2" runat="server" Text='<%#Eval("Status.Key") %>' />
                            </asp:TableCell><asp:TableCell Width="25%">
                                <asp:Label ID="Label3" runat="server" Text='<%#Eval("Ticket.Reported_By") %>' />
                            </asp:TableCell><asp:TableCell Width="25%">
                                <asp:Label ID="Label4" runat="server" Text='<%#Eval("DateOpened") %>' />
                            </asp:TableCell></asp:TableRow></asp:Table></div>
                    <div id="divTicketBody" class="divComments">
                        <rad:RadListView runat="server" ID="lsvActions" DataSource='<%#Eval("TicketActions") %>'>
                            <ItemTemplate>
                                <center>                            
                                <div id="divAddComment" style="width: 500px;">
                                    <div id="divCommentControls" style="margin: 8px 0px 8px 0px;">
                                        <rad:RadComboBox runat="server" ID="cboStatus" DataSource='<%#GetStatuses() %>' DataTextField="Status" DataValueField="ID" />                                            <rad:RadComboBox runat="server" ID="cboAssignTo" DataSource='<%#GetAssignees() %>' DataTextField="Key" DataValueField="Value" />
                                    </div>
                                    <rad:RadTextBox runat="server" ID="txtComment" TextMode="MultiLine" Width="500" Height="100" CssClass="commentBox" /><br />
                                    <div style="height: 35px;">
                                        <div style="float:left"><asp:CheckBox ID="cbMakeITTicket" runat="server" Text="Convert to IT Support Ticket" /></div>
                                        <div style="float:right; margin: 3px 0 0 0; "><rad:RadButton runat="server" ID="btnSubmit" Text="Submit" CssClass="buttonTag" /></div>
                                    </div>
                                </div>
                                </center>
                                <div id="divComment" class="divComment">
                                    <asp:Table runat="server" ID="tblComment" CellPadding="5">
                                        <asp:TableRow>
                                            <asp:TableCell Width="15%" HorizontalAlign="Center">
                                                <rad:RadBinaryImage runat="server" ID="imgCommenter" Width="50" Height="50" /><br />
                                                <asp:Label ID="Label5" runat="server" Text="[action author]" CssClass="commenterText" /><br />
                                                <asp:Label ID="Label6" runat="server" Text='<%#Eval("Action_Date", "{0:MMM d, yyy hh:mm}") %>'
                                                     CssClass="commenterText"/><br />
                                            </asp:TableCell><asp:TableCell>
                                                <asp:Label ID="Label7" runat="server" Text='<%#Eval("Description") %>' />
                                            </asp:TableCell>
                                        </asp:TableRow>
                                    </asp:Table>
                                </div>
                            </ItemTemplate>
                        </rad:RadListView>
                    </div>
            </div>
        </ItemTemplate>
    </rad:RadListView>
</asp:Content>

1 个答案:

答案 0 :(得分:1)

你正在寻找一个可能有很多行的控件中的组合框(因此有多行组合框) - 它不知道你正在寻找哪一个。

显然我不知道你需要对组合框做什么,但是你应该看看 替代方法。 看一下使用lsvActions的OnItemDataBound事件

然后添加代码,例如......

protected void lsvActions_ItemDataBound(object sender, GridItemEventArgs e)
        {


            if (e.Item is GridDataItem)
            {
                GridDataItem item = (GridDataItem)e.Item;
                RadComboBox  myCBO = (RadComboBox)item.FindControl("cboStatus")

                myCBO.Visible = false;

            }
}

...另外,只是一般提示,我通常会发现使用OnNeedDataSource来加载RadGrids和ListViews可以省去很多麻烦。

希望有所帮助。