Как мне сослаться на элемент управления просмотра списка, который вложен в шаблон элемента другого элемента управления просмотра списка? - PullRequest
2 голосов
/ 17 марта 2012

У меня есть элемент управления listview, который вложен в шаблон элемента другого элемента управления listview, на который я пытаюсь ссылаться в codebehind, используя метод .FindControl (), но он продолжает возвращать ноль.После того, как это заработает, мне нужно будет ссылаться на ComboBox внутри внутреннего списка.Вот где я до сих пор:

ListView lsvTickets
   ItemTemplate
        Listview lsvActions
             ItemTemplate
                  ComboBox cboAssignees

Я использую следующий код для попытки ссылки в коде:

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

Но это возвращает ноль.Я думал, что мне нужно будет сделать что-то подобное, чтобы достичь желаемого результата:

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 Ответ

1 голос
/ 07 февраля 2013

Вы ищете комбинированный список в элементе управления, который потенциально имеет много строк (например, строк экземпляров комбинированного списка) - он не знает, какой вы ищете.

Очевидно, я не знаюЗнайте, что вам нужно сделать со списком, но вы должны рассмотреть альтернативные подходы.Взгляните на использование события OnItemDataBound lsvActions

Затем добавьте код, такой как…

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 избавляет от многих головных болей.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...