2010-11-12 4 views
0

J'ai un GridView où l'une des cellules contient un TextBox avec un CalendarExtender attaché. Une autre cellule contient un bouton qui déclenche le CalendarExtender. Après la sélection d'une date, une fonction checkDate est déclenchée côté client, à la fin de laquelle je veux déclencher l'événement côté serveur du bouton. Mon seul problème est comment puis-je savoir sur quelle ligne l'utilisateur a cliqué, afin que je puisse déclencher l'événement du bon bouton de javascript?Obtenir la bonne ligne dans un GridView

Voici mon GridView:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" 
    BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" 
    OnRowCreated="GridView1_RowCreated" OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand"> 
    <Columns> 
     <asp:TemplateField HeaderText="Movie ID"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="lblMovieId" Text='<%#Eval("MovieId") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Movie Name"> 
      <ItemTemplate> 
       <%#Eval("MovieName") %></ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Return Date"> 
      <ItemTemplate> 
       <asp:TextBox runat="server" ID="txtRetDate" Text='<%# ((DateTime)Eval("ReturnDate")).ToShortDateString()%>' 
        BackColor="#EEEEEE" BorderStyle="None"></asp:TextBox> 
       <asp:CalendarExtender ID="CalendarExtender1" runat="server" PopupButtonID="btnUpdate" 
        TargetControlID="txtRetDate" Format="dd/MM/yyyy" OnClientDateSelectionChanged="checkDate" > 
       </asp:CalendarExtender> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="" HeaderStyle-Width="135px"> 
      <ItemStyle VerticalAlign="Top" /> 
      <ItemTemplate> 
       <asp:Button runat="server" ID="btnUpdate" Text="Update" CommandName="Update" /> 
       <asp:Button runat="server" ID="btnRemove" Text="Remove" CommandName="Remove" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Répondre

0

Je ne comprends pas pourquoi vous devez appeler gestionnaire d'événements Button_Click sur le côté serveur de JS ... Si vous avez besoin d'appeler « quelque chose » sur le côté serveur de javascript comme dernière opération à faire dans une fonction javascript, vous pouvez utiliser JQuery/Javascript pour appeler cette fonction. Vous devriez refactoriser votre code en plaçant le code du bouton clic sur le côté serveur dans une méthode que vous pouvez appeler à la fois du côté serveur Button_Click et de javascript ...

Du côté serveur, je suppose que vous faites l'événement button_click. vous devez factoriser comme montré ci-dessous:

Public void Button_Click(object sender,eventArgs e){ 

FuntionIWantCall(); 
} 


//this is the code that was into the button click befeore refactoring: 

private void FuntionIWantCall(){ 

//Do something on the server side 
} 


//this is the function you can call from javascript 

[WebMethod] 
public static void CalledFromJS(){ 
FuntionIWantCall(); 
} 

Sur vous page vous devez ajouter un gestionnaire de script:

<asp:ScriptManager ID="ScriptManager1" runat="server"  EnablePageMethods="True"></asp:ScriptManager> 


//at the end of your javascript function 

PageMethods.CalledFromJS(); 
+0

Lorsqu'un CalendarExtender est déclenché par un bouton, l'événement Button_Click côté serveur du bouton est déclenché. C'est pourquoi je dois le déclencher à partir de javascript quand j'ai fini. Dans votre réponse, je ne sais toujours pas sur quelle ligne l'utilisateur a cliqué sur le bouton (qui apparaît sur chaque ligne), et j'en ai encore besoin pour extraire des données de cette ligne pour mon code derrière l'événement. – Guy

+0

Pouvez-vous s'il vous plaît poster le code source gridView? (Juste le "HTML") –

+0

Ok, j'ai ajouté une version simplifiée de mon GridView – Guy

Questions connexes