2010-08-03 145 views
1

我想從DataList的EditItemTemplate訪問一個webcontrol(一個Textbox),所以我可以改變它。當我嘗試執行DataList.FindControl(「TextboxID」)時,它會返回null,因爲它無法識別已呈現的文本框。我試過在DataBinding,DataBound事件中尋找,而那些也不起作用。ASP.NET:從DataList中的EditItemTemplate訪問WebControl

更具體地說,我需要在用戶使用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> 

回答

0

您有肉眼可見= FALSE您calDateEdit。你是否在任何地方設置它爲真?它不會被渲染。

+0

是的,當我點擊旁邊的「選擇」按鈕時,我將其設置爲true。 protected void linkChoose2_Click(object sender,EventArgs e){//如果可見,則隱藏其他日曆如果(calDateEdit.Visible){calDatEdit.Visible = false; } calDateEdit.Visible = true; } – Confused 2010-08-03 15:23:57

0

這不是世界上最乾淨的東西,但我設法通過在「編輯模式」中加載我的頁面來獲得它,以便我想更改的文本框可見。然後做一個右鍵單擊 - >查看源,然後滾動到我的文本框,並得到它的ID,看起來像這樣:「ctl00 $ Content $ DataList $ ctl00 $ txtContractStart」

然後,我做了下面的代碼在我的日曆選擇更改事件中:

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

此代碼成功找到文本框。我希望這可以幫助別人。