2015-09-28 92 views
0

在網頁的一個,我有RadGridFormView控制 即如下標記:錯誤:「RGGSTAcCode」這個名字不會在目前情況下存在

<asp:FormView ID="fvIPRForm" runat="server" DefaultMode="Insert" DataKeyNames="RequestID" 
    DataSourceID="odsIPRForm" EnableModelValidation="True" OnItemInserting="fvIPRForm_ItemInserting" 
    OnDataBound="fvIPRForm_DataBound" OnItemUpdating="fvIPRForm_Updating" OnItemCommand="fvIPRForm_ItemCommand"> 

<%-- Create New IPR--%> 
<InsertItemTemplate> 

<telerik:RadMultiPage ID="RadMultiPage5" runat="server" SelectedIndex="0" Width="100%"> 
<telerik:RadPageView ID="RadPageView4" runat="server" Width="100%"> 
<telerik:RadAjaxPanel ID="RadAjaxPanel4" runat="server"> 

//RadGrid 
<telerik:RadGrid ID="RGGSTAcCode" runat="server" AutoGenerateColumns="false"....> 
//other code 

<telerik:GridTemplateColumn UniqueName="AccountCode" HeaderText="Account Code"> 
    <ItemTemplate> 
    <asp:Label ID="lblAcCode" Text='<%# Eval("AccountCode") %>' runat="server"></asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
    <asp:Label ID="lblAcCode2" runat="server" Text='<%# Eval("AccountCode") + " - " + Eval("AccountDescription")%>' Visible="false"></asp:Label>  

    <telerik:RadComboBox ID="ddlAccountCode" runat="server" Height="200" Width="260" 
    AllowCustomText="true" onclienttextchange="OnClientTextChange"> 
    </telerik:RadComboBox> 

    <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" OnClientClick="ButtonClicked()" UseSubmitBehavior="true" />&nbsp;          
    </EditItemTemplate> 
</telerik:GridTemplateColumn> 

</telerik:RadGrid> 

</telerik:RadAjaxPanel> 
</telerik:RadPageView> 
</telerik:RadMultiPage> 

</InsertItemTemplate> 

<%-- Edit IPR--%> 
<EditItemTemplate> 

<telerik:RadMultiPage ID="RadMultiPage5" runat="server" SelectedIndex="0" Width="100%"> 
<telerik:RadPageView ID="RadPageView4" runat="server" Width="100%"> 
<telerik:RadAjaxPanel ID="RadAjaxPanel4" runat="server"> 

//RadGrid 
<telerik:RadGrid ID="RGGSTAcCode" runat="server" AutoGenerateColumns="false"....> 
//other code 

<telerik:GridTemplateColumn UniqueName="AccountCode" HeaderText="Account Code"> 
    <ItemTemplate> 
    <asp:Label ID="lblAcCode" Text='<%# Eval("AccountCode") %>' runat="server"></asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
    <asp:Label ID="lblAcCode2" runat="server" Text='<%# Eval("AccountCode") + " - " + Eval("AccountDescription")%>' Visible="false"></asp:Label>  

    <telerik:RadComboBox ID="ddlAccountCode" runat="server" Height="200" Width="260" 
    AllowCustomText="true" onclienttextchange="OnClientTextChange"> 
    </telerik:RadComboBox> 

    <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" OnClientClick="ButtonClicked()" UseSubmitBehavior="true" />&nbsp;          
    </EditItemTemplate> 
</telerik:GridTemplateColumn> 

</telerik:RadGrid> 

</telerik:RadAjaxPanel> 
</telerik:RadPageView> 
</telerik:RadMultiPage> 

</EditItemTemplate> 

<%-- View IPR--%> 
<ItemTemplate> 

<telerik:RadMultiPage ID="RadMultiPage5" runat="server" SelectedIndex="0" Width="100%"> 
<telerik:RadPageView ID="RadPageView4" runat="server" Width="100%"> 
<telerik:RadAjaxPanel ID="RadAjaxPanel4" runat="server"> 

//RadGrid 
<telerik:RadGrid ID="RGGSTAcCode" runat="server" AutoGenerateColumns="false"....> 
//other code 

<telerik:GridTemplateColumn UniqueName="AccountCode" HeaderText="Account Code"> 
    <ItemTemplate> 
    <asp:Label ID="lblAcCode" Text='<%# Eval("AccountCode") %>' runat="server"></asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
    <asp:Label ID="lblAcCode2" runat="server" Text='<%# Eval("AccountCode") + " - " + Eval("AccountDescription")%>' Visible="false"></asp:Label> 

    <telerik:RadComboBox ID="ddlAccountCode" runat="server" Height="200" Width="260" 
    AllowCustomText="true" onclienttextchange="OnClientTextChange"> 
    </telerik:RadComboBox> 

    <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" OnClientClick="ButtonClicked()" UseSubmitBehavior="true" />&nbsp;          
    </EditItemTemplate> 
</telerik:GridTemplateColumn> 

</telerik:RadGrid> 

</telerik:RadAjaxPanel> 
</telerik:RadPageView> 
</telerik:RadMultiPage> 

</ItemTemplate> 

</asp:FormView> 

現在,我試圖讓RadGrid - EditItemTemplate - Button控制 裏面的Javascript使它可見真/假基於文本長度,用戶輸入RadComboBox

下面是我的javascript:

<script lang="javascript" type="text/javascript"> 
     function OnClientTextChange(sender, eventArgs) { 
      //alert("You typed " + sender.get_text()); 

      var len = sender.get_text().length; 
      alert(len); 

      var form = $find("<%#RGGSTAcCode.ClientID%>").get_masterTableView(); 
      alert(form); 

     } 
</script> 

當我運行我的網頁,我總是得到以下錯誤

The name 'RGGSTAcCode' does not exist in the current context

我試圖改變,如下Javascript代碼:

var form = document.getElementById('<%=fvIPRForm.FindControl("RGGSTAcCode").ClientID%>'); 
var masterTable = form.get_masterTableView(); 
alert(masterTable); 

但後來我得到[object Object]在「alert」中。

請讓我知道我的代碼中有什麼問題。提前致謝。 /啓用嘗試以下解決方案,所有的按鈕除了工作沒有禁用內部的if/else:

編輯

function onTextChange(sender, args) { 
       //alert("You typed " + sender.get_text()); 
       var len = sender.get_text().length; 
       alert(len); 

       var comboID = sender.get_id(); 
       var btnSearchID = comboID.replace("ddlAccountCode", "btnSearch"); 
       alert("Alert 1: " + btnSearchID); //getting : contentplaceholder_fviIPRForm_RGGSTAcCode_btnSearch 

       var btnCtrl = $get(btnSearchID); 
       alert("Alert 2: " + btnCtrl); //getting : [object HTMLInputElement] 

       if (len > 5) 
       { 
        alert("greater"); 

        btnCtrl.set_enabled(true); 
        btnsearch.set_enabled(true); // enable search button      
       } 
       else 
       { 
        alert("less"); 

        btnCtrl.set_enabled(false); 
        btnsearch.set_enabled(false); // disable search button     
       }    
      } 

請讓我知道什麼是錯在我的代碼。請回復

回答

0

以下代碼正常工作基於我的要求:

function onTextChange(sender, args) { 
       var len = sender.get_text().length; 
       //alert(len); 

       var comboID = sender.get_id(); 
       var btnSearchID = comboID.replace("ddlAccountCode", "btnSearch"); 
       var btnCtrl = document.getElementById(btnSearchID); 

       if (len >= 5) 
       { 
        btnCtrl.disabled = false; 
        //btnCtrl.style.display = ""; 
       } 
       else 
       { 
        btnCtrl.disabled = true; 
        //btnCtrl.style.display = "none"; 
       }    
      } 
0

這可能是你想要的答案....
不是最好的,但工作..

的.aspx

<asp:FormView ID="fv" runat="server" DefaultMode="Insert" OnDataBound="fv_DataBound"> 
     <InsertItemTemplate> 
      <telerik:RadMultiPage ID="RadMultiPage5" runat="server" 
      SelectedIndex="0" Width="100%"> 
       <telerik:RadPageView ID="RadPageView4" runat="server" Width="100%"> 
        <telerik:RadAjaxPanel ID="RadAjaxPanel4" runat="server"> 
         <telerik:RadGrid ID="RadGrid1" runat="server" 
         AutoGenerateColumns="false" 
         OnNeedDataSource="RadGrid1_NeedDataSource"> 
          <MasterTableView> 
           <Columns> 
            <telerik:GridTemplateColumn HeaderText="Acc"> 
             <ItemTemplate> 
              <asp:Label ID="lbl" runat="server" 
              Text='<%# Eval("Acc") %>'></asp:Label> 
              <telerik:RadComboBox ID="ddlAccountCode" 
              runat="server" Height="200" Width="260" 
              AllowCustomText="true" 
              OnClientTextChange="onTextChange"> 
               <Items> 
                <telerik:RadComboBoxItem Text="Gg" /> 
                <telerik:RadComboBoxItem Text="Gg1" /> 
                <telerik:RadComboBoxItem Text="Gg3" /> 
               </Items> 
              </telerik:RadComboBox> 
              <telerik:RadButton ID="btnSearch" runat="server" Text="Search" /> 
             </ItemTemplate> 
            </telerik:GridTemplateColumn> 
           </Columns> 
          </MasterTableView> 
         </telerik:RadGrid> 
        </telerik:RadAjaxPanel> 
       </telerik:RadPageView> 
      </telerik:RadMultiPage> 
     </InsertItemTemplate> 
    </asp:FormView> 

的Javascript

<telerik:RadCodeBlock ID="rcb" runat="server"> 
     <script type="text/javascript"> 
      function onTextChange(sender, args) { 
       var grid = $find('<%=fv.FindControl("RadGrid1").ClientID %>'); 
       var gridMasterData = grid.get_masterTableView(); 
       var dataItem = gridMasterData.get_dataItems(); 
       var length = dataItem.length; 

       // Loop 
       for (var i = 0; i < length; i++) { 
        // Find Control 
        var comboBox = dataItem[i].findControl("ddlAccountCode"); 

        // Check 
        if (comboBox != undefined) { 
         if (sender.get_id() == comboBox.get_id()) { 
          // Find Button 
          var btn = dataItem[i].findControl("btnSearch"); 
          var item = sender.get_text(); 

          // Check 
          if (item.length > 5) { 
           if (btn != undefined) btn.set_visible(true); 
          } 
          else btn.set_visible(false); 

          break; 
         } 
         else 
          continue; 
        } 
       } 
      } 
     </script> 
    </telerik:RadCodeBlock> 

的.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Check 
    if (!IsPostBack) 
    { 
     // Variable 
     DataTable dt = new DataTable(); 
     DataTable dt1 = new DataTable(); 
     dt.Columns.Add("Acc"); 

     dt1.Columns.Add("a"); 

     // Loop 
     for (int i = 0; i < 2; i++) 
      dt.Rows.Add("a " + i); 

     dt1.Rows.Add("AAAA"); 



     ViewState["Data"] = dt; 

     // Bind 
     fv.DataSource = dt1; 
     fv.DataBind(); 

     dt.Dispose(); 
     dt1.Dispose(); 
    } 
} 

protected void fv_DataBound(object sender, EventArgs e) 
{ 
    // FindControl 
    RadGrid RadGrid1 = fv.FindControl("RadGrid1") as RadGrid; 

    // Check 
    if (RadGrid1 != null) 
    { 
     RadGrid1.DataSource = ViewState["Data"] as DataTable; 
     RadGrid1.DataBind(); 
    } 
} 

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) 
{ 
    RadGrid rg = fv.FindControl("RadGrid1") as RadGrid; 

    // Check 
    if (rg != null) 
    { 
     rg.DataSource = ViewState["Data"] as DataTable; 
    } 
} 
+0

Thankyou的答覆。請注意,RadComboBox和Button位於'RadGrid'的'EditItemTemplate'內部。我試過你的代碼,我得到了alert(「dataItem:」+ dataItem);'爲空/空。由於這個'警報(長度);'也是空白的。此外,我嘗試了另外1種方法(請在我發佈的問題中檢查**編輯**部分),那裏的按鈕在IF/ELSE中沒有被禁用。 請讓我知道我錯在哪裏?請回復 – user3196511

+0

另外,在我的代碼中,當我在「for」循環中硬編碼「length = 5」時,出現錯誤:'無法讀取未定義的屬性'findcontrol'。請讓我知道我的代碼中有什麼問題?請回復 – user3196511

+0

更改你的'var btnCtrl = $ get(btnSearchID);'到'var btnCtrl = $ find(btnSearchID);'。那麼'findcontrol'是區分大小寫的......'findControl()'只適用於'Telerik Control only'。那麼你期望什麼......你的代碼上面是啓用下面是可見的,它如何工作... – Nic

相關問題