ASPSnippets

Alerts
Get notified when a new article is published.

Name
 
Email

Your email will always be private and will not be shared.

Follow us on twitter.
 
ASP.Net GridView - Get Row Index on RowCommand and Click events
Author Name: Mudassar Khan Published Date: June 27, 2009
Filed Under :
ASP.Net
 |
GridView
Views: 18822

Here I am explaining how to get the reference of the GridView Row and also the GridView Row Index when Button, ImageButton, or LinkButton is clicked or RowCommand Event is fired. In addition to that I will also explain how to add multiple CommandArguments to Control in GridView and retrieve the same.

 

 

Get GridView Row and GridView Row Index on RowCommand Event

 

Below is a simple ASP.Net GridView Control with a ButtonField and an OnRowCommand Event

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false" 

    OnRowCommand = "OnRowCommand">

 <Columns>

  <asp:ButtonField CommandName = "ButtonField"  DataTextField = "CustomerID"

        ButtonType = "Button"/>

 </Columns>

</asp:GridView>

 

Now when the Button of the button is clicked the OnRowCommand event is executed.

C#

protected void OnRowCommand(object sender, GridViewCommandEventArgs e)

{

    int index = Convert.ToInt32(e.CommandArgument);

    GridViewRow gvRow = GridView1.Rows[index]; 

}

 

VB.Net

Protected Sub OnRowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)

    Dim index As Integer = Convert.ToInt32(e.CommandArgument)

    Dim gvRow As GridViewRow = GridView1.Rows(index)

End Sub

 

The RowIndex of the GridView Row is contained in the CommandArgument Property. Thus with that index you can get the reference of the GridView Row.

 

 

 

Get GridView Row and GridView Row Index on Click Event of Button in TemplateField

 

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false">

    <Columns>

        <asp:TemplateField>

        <ItemTemplate>

           <asp:Button ID="Button1" runat="server" Text='<%#Eval("CustomerID")%>'

                  CommandArgument = "Button1"  OnClick = "Button1_Click" />

        </ItemTemplate>

        </asp:TemplateField>

    </Columns>

</asp:GridView>

 

Now when the Button is clicked the Click event of the Button is executed.

C#

protected void Button1_Click(object sender, EventArgs e)

{

    GridViewRow gvRow = (GridViewRow)(sender as Control).Parent.Parent;

    int index = gvRow.RowIndex;

}

 

VB.Net

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)

    Dim gvRow As GridViewRow = CType(CType(sender, Control).Parent.Parent, _

                                        GridViewRow)

    Dim index As Integer = gvRow.RowIndex

End Sub

 

You will notice I am type casting the sender parameter to get the reference of the GridView Row. The sender is the Button Control, thus the parent of the Button Control is the Cell and the parent of the Cell is the GridView Row.

Button ----------> GridView Cell ----------> GridView Row

The same applies to LinkButton and ImageButton.

   

 

 

Get CommandArgument on Click Event of Button in TemplateField

 

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false">

    <Columns>

        <asp:TemplateField>

        <ItemTemplate>

           <asp:Button ID="Button1" runat="server" Text='<%#Eval("CustomerID")%>'

                  CommandArgument = "Button1"  OnClick = "Button1_Click" />

        </ItemTemplate>

        </asp:TemplateField>

    </Columns>

</asp:GridView>

 

Many occasions you will need the properties of the Button like its CommandName, CommandArgument. So in that case you will need to get the reference of the Button using the sender parameter.

 

C#

protected void Button1_Click(object sender, EventArgs e)

{

    Button btn = (Button)sender;

    string CommandName = btn.CommandName;

    string CommandArgument = btn.CommandArgument;

}

 

VB.Net

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)

   Dim btn As Button = CType(sender, Button)

   Dim CommandName As String = btn.CommandName

   Dim CommandArgument As String = btn.CommandArgument

End Sub

 

Same can be done with LinkButtons and ImageButtons by creating an object and assigning the sender after type casting 

   

 

 

Multiple values in CommandArgument

Now by default there’s no property to do it we need to use a simple string of concatenation and then splitting them into arrays Consider the following GridView

 

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns = "false">

    <Columns>

        <asp:TemplateField>

        <ItemTemplate>

         <asp:Button ID="Button1" runat="server" Text='<%#Eval("CustomerID")%>'

          CommandArgument=

          '<%#Eval("PostalCode") + "," + Eval("City") + "," + Eval("Country") %>' 

              OnClick = "Button1_Click" />

        </ItemTemplate>

        </asp:TemplateField>

    </Columns>

</asp:GridView>

 

Now to get these values you need to do the following

 

C#

protected void Button1_Click(object sender, EventArgs e)

{

    Button btn = (Button)sender;

    string[] CommandArgument = btn.CommandArgument.Split(',');

    string CommandArgument1 = CommandArgument[0];

    string CommandArgument2 = CommandArgument[1];

    string CommandArgument3 = CommandArgument[2];

}

 

VB.Net

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)

   Dim btn As Button = CType(sender, Button)

   Dim CommandName As String = btn.CommandName

   Dim CommandArgument As String() = btn.CommandArgument.Split(",")

   Dim CommandArgument1 As String = CommandArgument(0)

   Dim CommandArgument2 As String = CommandArgument(1)

   Dim CommandArgument3 As String = CommandArgument(2)

End Sub

 

As you will notice I am simply splitting the values based on the separator I used to concatenate i.e. comma finally building a string array. Thus many times such basic concepts can make our job easier.

 

That’s it. This article comes to end. Hope you liked it.


If you like this article, help us grow by bookmarking this page on any social bookmarking site.
Bookmark and Share Page copy protected against web site content infringement by Copyscape

Related Articles

Comments

Reena Chithra said:
hibr br I have one doubt... i used vb.net code of button1click() in asp.net gridview. But button1click() is not firing ... please tell me what should i do to fire this event in asp.net ( vb code page).br br br Thanks...br Reena.
February 03, 2010  

Mudassar Khan said:
Reply To: Reena Chithra
Check whether you have written OnClick = "Button1_Click" in ASPX for the button
February 03, 2010  

Add Comments

You can add your comment about this article using the form below. Make sure you provide a valid email address
else you won't be notified when the author replies to your comment

Please note that all comments are moderated and will be deleted if they are
  • Not relavant to the article
  • Spam
  • Advertising campaigns or links to other sites
  • Abusive content.
There is no need to add BR tags. Simply press enter for new line

Name*  
Email*
Comment*  
Security code
Security code



 


Community News