2015-12-09 1 views
1

J'ai cherché sur ce sujet partout sur Internet et n'ai rien trouvé. Soit j'ai une difficulté à formuler mon problème ou je fais quelque chose de si mal que personne d'autre ne l'a jamais essayé ...Relier un gridview INSIDE ModalPopupExtender

J'ai une grille de vue. J'utilise un bouton dans le gridview pour exécuter une commande pour ouvrir un ModalPopupExtender. Cette partie fonctionne très bien. Une fois la fenêtre ouverte, je veux être en mesure d'appuyer sur un bouton pour exécuter une fonction qui va effectuer une requête Sql et lier un gridview qui est à l'intérieur du panneau contextuel. Après cela, l'utilisateur peut effectuer une action avec le gridview qui ferme le popup modal.

Voici mon HTML -

<cc1:ModalPopupExtender runat="server" ID="MPE_Issue" PopupControlID="pnlIssue" BackgroundCssClass="ModalPopupBG" 
      TargetControlID="Hid_Sno" CancelControlID="btnIssueCancel"> 
     </cc1:ModalPopupExtender> 
     <asp:Panel ID="pnlIssue" runat="server" Style="display: none" > 
      <div class="HelloPopup"> 
       <div> 
        <br /> 
        <h2>&nbsp;&nbsp;&nbsp;Issue Equipment</h2> 
        <br /> 
        <asp:Panel runat="server" ID="pnlIssueSearch" DefaultButton="btnIssueSearch"> 
         <div class="block" style="text-align: right; margin-left: 50px"> 
          <asp:Label CssClass="lblBlock" runat="server" ID="lblIssueSearch" Text="Search:"></asp:Label> 
         </div> 
         <div class="block"> 
          <asp:TextBox runat="server" ID="txtIssueSearch" Width="160px"></asp:TextBox> 
          <asp:ImageButton runat="server" ID="btnIssueSearch" ImageUrl="../Images/search.png" OnClick="btnIssueSearch_Click" /> 
         </div> 
        </asp:Panel> 
        <asp:Panel runat="server" ID="pnlIssueSubmit" DefaultButton="btnIssueSubmit"> 
         <div style="width: 275px; margin: auto; height: 295px; overflow: scroll;"> 
          <asp:GridView runat="server" ID="gvIssue" AutoGenerateColumns="false" CssClass="mGrid" OnRowCommand="gvIssue_RowCommand"> 
           <Columns> 
            <asp:TemplateField HeaderText="Qty"> 
             <ItemTemplate> 
              <asp:TextBox ID="txtIssueQty" runat="server" Text='<%# Bind("QTY") %>'></asp:TextBox> 
             </ItemTemplate> 
            </asp:TemplateField> 
            <asp:BoundField HeaderText="Assignment" DataField="FIRST_NAME" /> 
           </Columns> 
          </asp:GridView> 
         </div> 
         <div class="center"> 
          <asp:Button runat="server" ID="btnIssueSubmit" Text="Issue" OnClick="btnIssueSubmit_Click" /> 
          <input type="button" id="btnIssueCancel" value="Cancel" /> 
         </div> 
        </asp:Panel> 

Et le codebehind -

protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      if (e.CommandName == "issue") 
      { 
       GridViewRow gvr3 = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer); 
       string itemNo = ((Label)gvr3.Cells[0].FindControl("lblItemNo")).Text; 
       btnIssueSubmit.Visible = false; 
       txtIssueSearch.Text = ""; 

       MPE_Issue.Show(); 

      }   
    protected void btnIssueSearch_Click(object sender, ImageClickEventArgs e) 
    { 
     string query = "SELECT QTY, NEW_EMP_ID as NAME FROM TRANSACTION_TRACKING WHERE NEW_EMP_ID = @inputINT"; 
     string inputString = "%" + txtIssueSearch.Text + "%"; 
     int inputINT = Convert.ToInt32(txtIssueSearch.Text); 

     SqlConnection con = new SqlConnection(CS); 
     SqlDataAdapter da = new SqlDataAdapter(query, con); 
     SqlParameter parameter = new SqlParameter("inputString", inputString); 
     SqlParameter parameter2 = new SqlParameter("inputINT", inputINT); 
     da.SelectCommand.Parameters.Add(parameter); 
     da.SelectCommand.Parameters.Add(parameter2); 

     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     gvIssue.DataSource = ds; 
     gvIssue.DataBind(); 

     btnIssueSubmit.Visible = true; 

     MPE_Issue.Show(); 

    } 

EDIT/SOLUTION je vais sur la résolution de ce problème mal. Je voulais remplacer la nature d'asp.net au lieu d'aller avec le flux et de résoudre le problème systématiquement. Pour surmonter ce problème, j'ai changé mon bind de données dans sa propre méthode et ai eu le bouton dans le panneau activer la méthode that, placer le contrôle de popup à Open(), et également placer un booléen de faux à vrai. Puis sur le page_load j'ai un événement qui vérifie le booléen et fait automatiquement la méthode de données si elle est vraie (et donc un paramètre de recherche est dans la zone de texte).

Merci à tous pour vos suggestions et votre aide.

+0

J'essaie de comprendre ce qui se passe. Je fais ça tout le temps. Est-ce que le popup approprié s'ouvre? pnlIssue? – wolfeh

+0

Il ouvre le bon panneau. J'ai effectivement trouvé une solution. –

Répondre

0

j'allais sur la résolution de ce problème mal. Je voulais remplacer la nature d'asp.net au lieu d'aller avec le flux et de résoudre le problème systématiquement. Pour surmonter ce problème, j'ai changé mon bind de données dans sa propre méthode et ai eu le bouton dans le panneau activer la méthode that, placer le contrôle de popup à Open(), et également placer un booléen de faux à vrai. Puis sur le page_load j'ai un événement qui vérifie le booléen et fait automatiquement la méthode de données si elle est vraie (et donc un paramètre de recherche est dans la zone de texte).

1

Si vous faites de votre pnlIssueSubmit un UpdatePanel alors un trigger asyncpostback sur btnIssueSearch ne résoudrait pas votre problème? Parce que votre imageButton doit faire un post afin de vous rafraîchir la grille, mais vous perdrez votre modal. Quelque chose comme ceci:

<asp:UpdatePanel id="pnlIssueUpdate" runat="server"> 
<ContentTemplate> 
    <asp:Panel runat="server" ID="pnlIssueSubmit" DefaultButton="btnIssueSubmit"> 
     <div style="width: 275px; margin: auto; height: 295px; overflow: scroll;"> 
      <asp:GridView runat="server" ID="gvIssue" AutoGenerateColumns="false" CssClass="mGrid" OnRowCommand="gvIssue_RowCommand"> 
       <Columns> 
        <asp:TemplateField HeaderText="Qty"> 
         <ItemTemplate> 
          <asp:TextBox ID="txtIssueQty" runat="server" Text='<%# Bind("QTY") %>'></asp:TextBox> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField HeaderText="Assignment" DataField="FIRST_NAME" /> 
       </Columns> 
      </asp:GridView> 
     </div> 
     <div class="center"> 
      <asp:Button runat="server" ID="btnIssueSubmit" Text="Issue" OnClick="btnIssueSubmit_Click" /> 
      <input type="button" id="btnIssueCancel" value="Cancel" /> 
     </div> 
    </asp:Panel> 
</ContentTemplate> 
<Triggers> 
    <asp:asyncPostBackTrigger ControlID="btnIssueSearch" /> 
</Triggers> 

+0

Je vais regarder dans cette option quand j'ai un peu de temps. J'ai besoin d'en savoir plus sur les panneaux de mise à jour. J'ai trouvé une solution de contournement que je suis sur le point de mettre dans ma question. Merci! –