ASP.NET: доступ к веб-элементу управления из EditItemTemplate в DataList - PullRequest
1 голос
/ 03 августа 2010

Я пытаюсь получить доступ к веб-контролю (текстовое поле) из EditItemTemplate DataList, поэтому я могу изменить его. Когда я пытаюсь сделать DataList.FindControl ("TextboxID"), он возвращается с нулем, потому что он не распознает, что текстовое поле визуализировано. Я попытался просмотреть события DataBinding, DataBound, и они тоже не работают.

Если говорить более конкретно, мне нужно изменить значение текстового поля, когда пользователь использует элемент управления Calendar, поэтому мне нужно получить доступ к элементу управления из EditItemTemplate в событии Calendar_SelectionChanged.

У кого-нибудь есть идеи или обходные пути? Спасибо!

Код:

protected void calendar1_SelectionChanged(object sender, EventArgs e)
{
    // Access EditItemTemplate Control
}


<asp:DataList ID="DataListMaintenance" runat="server" 
                                        oncancelcommand="DataListMaintenance_CancelCommand" 
                                        oneditcommand="DataListMaintenance_EditCommand" 
                                        onupdatecommand="DataListMaintenance_UpdateCommand" 
                                        DataSourceID = "LMMaintDataSource" 
                                        ondeletecommand="DataListMaintenance_DeleteCommand">
                                    <EditItemTemplate>
                                        <table width = "100%" cellpadding = "2" cellspacing = "1">
                                            <tr>
                                                <td valign = "top">
                                                    <b>Contract Start Date:</b>
                                                </td>
                                                <td>
                                                    <asp:TextBox ID="txtContractStart" runat="server" Text = '<%# Bind("ContractStartDate") %>'></asp:TextBox>
                                                    <% if (!calDateEdit.Visible)
                                                       { %>
                                                    <asp:LinkButton ID="linkChoose" runat="server" onclick="linkChoose2_Click">Choose</asp:LinkButton>
                                                    <%} %>
                                                    <% if (calDateEdit.Visible)
                                                       { %>
                                                    <asp:LinkButton ID="linkCancel" runat="server" onclick="linkCancel2_Click">Cancel</asp:LinkButton>
                                                    <%} %>
                                                </td>
                                                <td>
                                                    <asp:Calendar ID="calDateEdit" runat="server" Visible ="false" 
                                    onselectionchanged="calendar1_SelectionChanged">
                                     <SelectedDayStyle BorderColor="Blue" BorderStyle="Solid" />
                                 </asp:Calendar>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <asp:Button ID="cmdUpdate" runat="server" Text="Update" CommandName = "Update" />&nbsp;<asp:Button ID="cmdCancel" runat="server" Text="Cancel" CommandName = "Cancel" />
                                                </td>
                                            </tr>
                                        </table>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <table width = "100%" cellpadding = "2" cellspacing = "1">
                                            <tr>
                                                <td valign = "top">
                                                    <b>Contract Start Date:</b>
                                                </td>
                                                <td>
                                                    <asp:Label ID="lblStart" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ContractStartDate")%>'></asp:Label>
                                                </td>
                                            </tr>
                                        </table>
                                    </ItemTemplate>
                                    </asp:DataList>

Ответы [ 2 ]

0 голосов
/ 03 августа 2010

Это не самая чистая вещь в мире, но мне удалось ее получить, загрузив мою страницу в «Режим редактирования», чтобы текстовое поле, которое я хотел изменить, было видно.Затем выполните щелчок правой кнопкой мыши -> Просмотреть источник, затем прокрутите вниз до моего текстового поля и получите его идентификатор, который выглядит примерно так: «ctl00 $ Content $ DataList $ ctl00 $ txtContractStart»

Затем я сделалследующий код в моем событии выбора календаря:

TextBox txtContract = (TextBox)Page.FindControl("ctl00$Content$DataList$ctl00$txtContractStart");

Этот код успешно обнаружил текстовое поле.Я надеюсь, что это помогает кому-то еще.

0 голосов
/ 03 августа 2010

Вы имеете visible = false в вашем calDateEdit.Вы устанавливаете это к истине где-нибудь?В противном случае оно не будет отображено.

...