5

I have a gridviewMain. Whenever I click the CLOSE linkbutton for row 1 I want to get the value aa. Click Close on row 2 get the value of bb. Any ideas.

A    B   C  
aa  xx   3  CLOSE 
bb  yy   4  CLOSE
cc  zz   5  CLOSE

aspx

 <asp:BoundField DataField="afield" HeaderText="A" 
     SortExpression="afield" >
    <ItemStyle HorizontalAlign="Center" />
 </asp:BoundField>
 <asp:BoundField DataField="bfield" HeaderText="B" SortExpression="cfield" >
     <ItemStyle HorizontalAlign="Center" />
  </asp:BoundField>
  <asp:BoundField DataField="cfield" HeaderText="C" SortExpression="cfield" >
     <ItemStyle HorizontalAlign="Center" />
   </asp:BoundField>
 <asp:TemplateField ShowHeader="False">

       <ItemTemplate>
          <asp:LinkButton ID="lbClose" runat="server" CausesValidation="False"  CommandName="CloseClicked" Text="Close"></asp:LinkButton>

        </ItemTemplate>

                    </asp:TemplateField>
Apollo
  • 1,990
  • 12
  • 44
  • 65

4 Answers4

16

Asssuming that you are using BoundFields for the first three columns and you want to handle the LinkButton-click event (instead of the e.g. RowCommand of the GridView):

protected void CloseLinkClicked(Object sender, EventArgs e)
{
    var closeLink = (Control) sender;
    GridViewRow row = (GridViewRow) closeLink.NamingContainer;
    string firstCellText = row.Cells[0].Text; // here we are
}

If you are using TemplateFields and the value aa is in a Label (e.g. LblValue):

Label lblValue = (Label) row.FindControl("LblValue"); // lblValue.Text = "aa"
Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939
3

Use data keys for this. Much simpler:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="SomeValue, AnotherValue" ... >

And then in code-behind, just get the keys associated with the row:

var rowIndex = 0;
var someValue = GridView1.DataKeys[rowIndex]["SomeValue"] as string;
James Johnson
  • 45,496
  • 8
  • 73
  • 110
0

You need to assign a CommandName to your LinkButton column in the GridView markup. From there you will also need to wire up the OnRowCommand event to handle your Close command.

Here is an example of using an Add command on a GridView:

Markup:
<asp:gridview id="ContactsGridView" datasourceid="ContactsSource" allowpaging="true" 
    autogeneratecolumns="false" onrowcommand="ContactsGridView_RowCommand" runat="server">
    <columns>
       <asp:buttonfield buttontype="Link" commandname="Add" text="Add"/>
       <asp:boundfield datafield="ContactID" headertext="Contact ID"/>
       <asp:boundfield datafield="FirstName" headertext="First Name"/> 
       <asp:boundfield datafield="LastName" headertext="Last Name"/>
    </columns>
</asp:gridview>

Code-Behind:
void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
    // If multiple buttons are used in a GridView control, use the
    // CommandName property to determine which button was clicked.
    if(e.CommandName=="Add")
    {
        // Convert the row index stored in the CommandArgument
        // property to an Integer.
        int index = Convert.ToInt32(e.CommandArgument);

        // Retrieve the row that contains the button clicked 
        // by the user from the Rows collection.
        GridViewRow row = ContactsGridView.Rows[index];

        // Create a new ListItem object for the contact in the row.     
        ListItem item = new ListItem();
        item.Text = Server.HtmlDecode(row.Cells[2].Text) + " " +
        Server.HtmlDecode(row.Cells[3].Text);

        // If the contact is not already in the ListBox, add the ListItem 
        // object to the Items collection of the ListBox control. 
        if (!ContactsListBox.Items.Contains(item))
        {
            ContactsListBox.Items.Add(item);
        }
    }
}
Karl Anderson
  • 34,606
  • 12
  • 65
  • 80
0

You can get like this

<asp:GridView ID="grid" runat="server" 
AutoGenerateColumns="false" onrowcommand="grid_RowCommand" >
<Columns>
<asp:TemplateField >
<ItemTemplate>
<asp:TextBox ID="txt" runat="server" Text='<%#Eval("xxx")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField >
<ItemTemplate>
<asp:LinkButton ID="lnk" CommandArgument=<%# Container.DataItemIndex + 1 %> 
CommandName="arg">Click</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

Code

 protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowindex = int.Parse(e.CommandArgument.ToString());
((TextBox)(grid.Rows[rowindex].FindControl("txtgvunit"))).Text
} 

Ref http://dotnetinbox.blogspot.in/2014/02/get-gridview-row-data-in-c.html

balaji
  • 1,236
  • 2
  • 18
  • 28