2015-09-23 1 views
1

J'ai un gridview qui a ce regard:la liaison d'un ItemTemplate bouton pour vérifier dans quelle ligne a été cliqué

First Look

Le Edit est classique Modifier/mise à jour/Annuler ButtonColumn. La mise à niveau est un ItemTemplate avec un bouton intégré. Après avoir cliqué sur l'un des boutons de mise à niveau/mise à niveau inférieur, le gridview obtient ce regard:

After Button Click

Maintenant, je l'ai accompli jusqu'à présent d'envoyer l'événement bouton Enregistrer, afin d'obtenir la valeur de seulement l'un des checkboxList (celui fourni avec le bouton Save). Cependant, je voudrais associer chaque bouton Bloc de CheckboxList/Save à un seul bouton Upgrade/Downgrade. Donc, si je clique sur le bouton sur la première rangée, je dois désactiver le bloc sur la deuxième rangée et vice-versa. Ce que je droit est maintenant le suivant:

Dans la mise à niveau/mise à niveau inférieur ButtonClick:

protected void Button2_Click(object sender, EventArgs e) 
    { 
     GridView1.Columns[2].Visible = true; 
     button2Clicked = true; 
     Session["buttonClicked"] = button2Clicked; 
    } 

Dans la zone Enregistrer ButtonClick:

protected void Button3_Click(object sender, EventArgs e) 
    { 

     CheckBoxList chb = new CheckBoxList(); 
     Button bt3 = (Button)sender; 

      chb = (CheckBoxList)bt3.FindControl("Checkbox1"); 

      if(chb.SelectedValue=="Upgrade") 
       Response.Write("Upgrade"); 
      else if (chb.SelectedValue == "Downgrade") 
       Response.Write("Downgrade"); 
        else 
         Response.Write("Not Allowed!"); 


    } 

A La deuxième version du bouton EnregistrerClick est la suivante:

protected void Button3_Click(object sender, EventArgs e) 
    { 

     CheckBoxList chb = new CheckBoxList(); 
     Button bt3 = (Button)sender; 

      chb = (CheckBoxList)bt3.FindControl("Checkbox1"); 
      if ((bool)Session["buttonClicked"]) 
      { 
       if (chb.SelectedValue == "Upgrade") 
        Response.Write("Upgrade"); 
       else if (chb.SelectedValue == "Downgrade") 
        Response.Write("Downgrade"); 
       else 
        Response.Write("Not Allowed!"); 
      } 
      else { Response.Write("Wrong Button clicked!"); } 


    } 

Il semble que le bouton Up/Downgrade clic n'est pas stockée. Est-ce un événement qui me manque?

+1

FindControl ne s'intéresse qu'aux enfants immédiats. CheckBoxList n'est certainement pas un enfant d'un bouton. En supposant qu'ils soient déclarés les uns à côté des autres dans le balisage, 'bt3.Parent.FindControl (" Checkbox1 ")' pourrait fonctionner.Cependant, tout cela semble hacky, le bon moyen serait d'utiliser l'événement RowCommand – Andrei

+0

@Andrei cela fonctionne réellement, car la checkboxList et le bouton Enregistrer sont déclarés au même ItemTemplate. Le problème que j'ai est avec l'autre bouton, qui devrait activer seulement un du bloc CheckboxList/Save Button. Avez-vous un exemple sur RowCommand? Et de quelle manière vous pensez que c'est un hacky? – Ange1

+0

@Andrei merci beaucoup, quelques modifications sur l'événement RowCommand, et tout fonctionne parfaitement. Si vous postez cela comme une réponse, je vais le marquer avec un grand plaisir :) – Ange1

Répondre

1

Ainsi, Après soupçon @Andrei sur l'utilisation RowCommand Event et le tutoriel trouvé: here et je here(This is in both c# and VB) modifié mon code comme suit:

Tout d'abord, j'ai modifié le bouton comme ceci:

<asp:Button ID="Button2" runat="server" Text="Upgrade/Downgrade" OnClick="Button2_Click" CommandName="Command" CommandArgument="<%# Container.DataItemIndex %>" /> 

Use this tutorial to understand Container.DataItemIndex

En outre, vous devez ajouter athe événement RowCommand à GRIDVIEW comme ceci:

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    onrowcancelingedit="GridView1_RowCancelingEdit" OnRowCommand="GridView1_RowCommand" 
    onrowediting="GridView1_RowEditing" onrowupdating="GridView1_RowUpdating" 
    onrowdatabound="GridView1_RowDataBound" EnableModelValidation="True" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" GridLines="Vertical"> 
       <AlternatingRowStyle BackColor="#CCCCCC" /> 

Et dans le code derrière, voici les modifications:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 


      if (e.CommandName == "Command") 
      { 
       //Determine the RowIndex of the Row whose Button was clicked. 
       int rowIndex = Convert.ToInt32(e.CommandArgument); 

       //Reference the GridView Row. 
       GridViewRow row = GridView1.Rows[rowIndex]; 

       //Fetch value of CheckboxList. 
       CheckBoxList chb = (row.FindControl("Checkbox1") as CheckBoxList); 
       chb.Enabled = true; 
      } 

    } 

C'est aussi simple que ça en a l'air!

+1

Belle réponse détaillée. N'hésitez pas à accepter cela! – Andrei

+0

@Andrei je dois attendre 48 heures: D. J'ai décidé de donner les tutoriels, car dans 10 tutoriels, ce sont les 3 meilleurs au moins pour moi – Ange1