ASP.NET:从DataList中的EditItemTemplate访问WebControl

时间:2010-08-03 13:24:56

标签: asp.net edititemtemplate

我正在尝试从DataList的EditItemTemplate访问webcontrol(文本框),所以我可以更改它。当我尝试执行DataList.FindControl(“TextboxID”)时,它返回null,因为它无法识别已呈现的文本框。我已经尝试查看DataBinding,DataBound事件,但这些事件也不起作用。

更具体地说,我需要在用户使用Calendar控件时更改文本框的值,因此我需要在Calendar_SelectionChanged事件中从EditItemTemplate访问该控件。

任何人有任何想法或解决方法吗?谢谢!

代码:

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 :(得分:0)

你的calDateEdit上有visible = false。你在任何地方都设置为真?它不会以其他方式呈现。

答案 1 :(得分:0)

这不是世界上最干净的东西,但我设法通过在“编辑模式”中加载我的页面来获得它,以便我想要更改的文本框可见。然后做右键 - &gt;查看源代码,然后向下滚动到我的文本框并获取它的ID,如下所示:“ctl00 $ Content $ DataList $ ctl00 $ txtContractStart”

然后我在日历选择更改事件中执行了以下代码:

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

此代码成功找到了文本框。我希望这有助于其他人。