2011-07-19 5 views
1

J'ai une vue de grille qui contient une zone de texte comme champ de modèle. La vue de grille se trouve dans un panneau de mise à jour. J'utilise l'événement text changed pour calculer le pourcentage des quatre premières zones de texte et placer le résultat dans la cinquième zone de texte. Mon problème est le suivant: je perds toujours le focus dès que le texte change et chaque fois que je était censé déplacer le curseur de la souris à nouveau à la boîte de texte cible.Comment résoudre ce problème? Je veux garder le focus sur ma zone de texte après le texte a changé.Comment garder le focus sur la zone de texte après le changement d'un événement texte

Mon code:

private void calc() 
     { 
      float sum = 0; 
      for (int i = 0; i < 7; i++) 
      { 
       RadTextBox txt1 = (RadTextBox)gv_Evaluation.Rows[i].Cells[3].FindControl("txt_evaluateWeights"); 
       int weight; 
       bool result = Int32.TryParse(txt1.Text, out weight); 
       if (result) 
       { 
        sum += weight; 
       } 
      } 

      double percentage; 
      percentage = Math.Round((sum/100) * 100, 2); 
      RadTextBox txt3 = (RadTextBox)gv_Evaluation.Rows[7].Cells[3].FindControl("txt_evaluateWeights"); 
      txt3.Text = percentage.ToString();//string.Format("{0:0.0%}", percentage.ToString()); 

     } 

 protected void txt_evaluateWeights_TextChanged(object sender, EventArgs e) 

     { 
      calc(); 
     } 

Mon ASPX:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Panel ID="pnl_research" runat="server" CssClass="pnl"> 
       <div id="detailsDiv" align="center" style="width: 800px;"> 
        <table border="0" width="98%"> 
         <tr> 
          <td align="center"> 
           <asp:Panel ID="panel_rmv" runat="server" Visible="true" Direction="RightToLeft"> 
            <div class="grid" dir="rtl"> 
             <div class="grid" dir="rtl"> 
              <div class="rounded"> 
               <div class="top-outer"> 
                <div class="top-inner"> 
                 <div class="top"> 
                  <h2> 
                   <asp:Label ID="Label35" runat="server" Text="##"></asp:Label></h2> 
                 </div> 
                </div> 
               </div> 
               <div class="mid-outer"> 
                <div class="mid-inner"> 
                 <div class="mid"> 
                  <asp:GridView Width="100%" ID="gv_Evaluation" CssClass="datatable" AllowSorting="True" 
                   runat="server" TabIndex="2" AutoGenerateColumns="False" AllowPaging="True" GridLines="None" 
                   OnRowDataBound="gv_Evaluation_RowDataBound"> 
                   <EmptyDataTemplate> 
                    <table style="width: 100%;"> 
                     <tr> 
                      <td> 
                      &nbsp; 
                     </tr> 
                     <tr> 
                      <td align="center"> 
                       <asp:Label ID="Label4" runat="server" Font-Size="16pt" Text="&#1604;&#1575; &#1610;&#1608;&#1580;&#1583; &#1576;&#1610;&#1575;&#1606;&#1575;&#1578;"></asp:Label> 
                      </td> 
                     </tr> 
                     <tr> 
                      <td> 
                       &nbsp; 
                      </td> 
                     </tr> 
                    </table> 
                   </EmptyDataTemplate> 
                   <Columns> 
                    <asp:TemplateField HeaderText="م"> 
                     <ItemTemplate> 
                      <asp:Label ID="lblSerial" runat="server"></asp:Label> 
                     </ItemTemplate> 
                    </asp:TemplateField> 
                    <asp:BoundField HeaderText="" DataField="activityType" /> 
                    <asp:BoundField HeaderText="" DataField="activityWeight" /> 
                    <asp:TemplateField HeaderText=""> 
                     <ItemTemplate> 
                      <telerik:RadTextBox ID="txt_evaluateWeights" runat="server" AutoPostBack="True" OnTextChanged="txt_evaluateWeights_TextChanged"> 
                      </telerik:RadTextBox> 
                     </ItemTemplate> 
                    </asp:TemplateField> 
                    <asp:BoundField HeaderText="" DataField="activitySelf" /> 
                    <asp:BoundField HeaderText="" DataField="activityBoss" /> 
                    <asp:BoundField HeaderText="" DataField="activityDean" /> 
                   </Columns> 
                   <RowStyle VerticalAlign="Top" CssClass="row" /> 
                  </asp:GridView> 
                 </div> 
                </div> 
               </div> 
               <div class="bottom-outer"> 
                <div class="bottom-inner"> 
                 <div class="bottom"> 
                 </div> 
                </div> 
               </div> 
              </div> 
             </div> 
           </asp:Panel> 
          </td> 
         </tr> 
        </table> 
       </div> 
      </asp:Panel> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Répondre

1

Merci beaucoup, je fixe mon problème:

Premièrement:

parce qu'aucune propriété argument de commande pour la zone de texte pour stocker l'index gridview, je le stocke dans l'index des onglets.

TabIndex='<%#((GridViewRow)Container).RowIndex%>' 

protected void txt_evaluateWeights_TextChanged(object sender, EventArgs e) 
     { 
      calc(); 
      int index = ((RadTextBox)sender).TabIndex; 
      ((RadTextBox)gv_Evaluation.Rows[index + 1].Cells[3].FindControl("txt_evaluateWeights")).Focus(); 
     } 
3

Vous pouvez utiliser jquery pour le faire

$('#txt_evaluateWeights').focus(); 

ou javascript normale

document.getElementById("Box1").focus(); 
+0

Où écrire ce code? –

+0

Vous devez ajouter un événement onblur dans la zone de texte, et écrire le code ci-dessus –

+0

c'est asp: TextBox (contrôle du serveur). –

4

Est-ce dans une zone de texte le UpdatePanel? La page entière est-elle affichée?

Vous pouvez définir la mise au point dans le code-behind ...

protected void txt_evaluateWeights_TextChanged(object sender, EventArgs e) 
{ 
    calc(); 
    ((TextBox)sender).Focus(); 
} 
+0

Non, il est au champ de modèle dans la vue de la grille –

+1

Essayez ceci et laissez-moi savoir comment ça se passe. – canon

+0

hmmm, aftar je clique sur 'tab' le résultat apparaît dans la dernière zone de texte et le focus retourne à' l'expéditeur' mais je veux la boîte de texte après avoir cliqué sur le 'tab'. parce que l'utilisateur a déjà écrit dans cette zone de texte. –

1
protected void TxtPaidAmtTextChanged(object sender, EventArgs e) 
{ 
    int index = ((TextBox)sender).TabIndex; 
    TextBox txtindex = (TextBox)gridCurrentFeeHead.Rows[index + 1].FindControl("TxtPaidAmt"); 
    txtindex.Focus(); 
} 
Questions connexes