Get value of GridView Cell in RowCommand

I need to get the value of a cell from the RowCommand event, but the value is not in the PrimaryKeyNames parameter of the GridView.

Currently I have:

if (e.CommandName == "DeleteBanner")
        {
            GridViewRow row = gvCurrentPubBanner.SelectedRow;
            string BannerName = row.Cells[1].Text;

This doesn’t work (index out of range error), I’ve also tried:

    int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = gvCurrentBanners.Rows[index];

This doesn’t work either as the CommandArgument (the banner ID) is not the row ID.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Dim row As GridViewRow = CType(CType(e.CommandSource, Control).NamingContainer, GridViewRow)

Then get the key or get the cell and cast to a datacontrolfield.

Dim id As Guid = GridView1.DataKeys(row.RowIndex).Value

Dim email As String = CType(row.Cells(2), DataControlFieldCell).Text

Remark: this only works with Boundfields.

Method 2

@Romil: your code in C#:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
    int id = (int)GridView1.DataKeys[row.RowIndex].Value;
}

(LinkButton is button in template field).

Method 3

Try out this one..

GridViewRow gvRow = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
int rowIndex=gvRow.RowIndex

Method 4

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

It only work when you use your button in Gridview is

<Columns>   
     <asp:ButtonField ButtonType="Button" Text="Save"  CommandName="Select" /> 
</Columns>

I not sure this is correct but it work for me

Method 5

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Edit_Mob") {

        GridViewRow row = (GridViewRow (((ImageButton)e.CommandSource).NamingContainer);

        int RowIndex = row.RowIndex; // this find the index of row

        int varName1 = Convert.ToInt32(((Label)row.FindControl("lbl_mobile_id")).Text.ToString()); //this store the  value in varName1

        }
   }

Method 6

if (e.CommandName == "EditDetails")
{
    mp1.Show();
    //LinkButton LnkEdit = (LinkButton)sender;
    GridViewRow gvrow = (GridViewRow)((Control)e.CommandSource).NamingContainer;
    Panel1.Visible = true;
    Uploaddocs.Visible = false;
    Label lblmobile = (Label)gvrow.FindControl("lblN_MobileNo") ;
    Label lblDeathDate = (Label)gvrow.FindControl("lblDEATHDT");
    Label lblCAUSEOFDEATH = (Label)gvrow.FindControl("lblCAUSEOFDEATH");
    Label lblPLACEOFDEATH = (Label)gvrow.FindControl("lblPLACEOFDEATH");
    // Label lblRemarks = (Label)gvrow.FindControl("lblpracticalcredits");
    Label lblBank = (Label)gvrow.FindControl("lblBank");
    Label lblBranch = (Label)gvrow.FindControl("lblBranch");
    Label lblIFSC = (Label)gvrow.FindControl("lblIFSC");
    txtMobile.Text = Convert.ToInt64(lblmobile.Text).ToString();       //May be BigInt
    txtdate.Text = lblDate.Text;
    //ddlReasons.SelectedIndex = Convert.ToInt32(lblCAUSEOFDEATH.Text);
    //ddlReasons.SelectedValue = lblCAUSEOFDEATH.Text;
    txtcausedeath.Text = lblCAUSEOFDEATH.Text;
    txtPlaceofdeath.Text = lblPLACEOFDEATH.Text;
    BindBank();
    ddlbank.SelectedItem.Text = lblBank.Text;             //Sdents
    txtAddrBank.Text = lblBranch.Text;
    txtIFSC.Text = lblIFSC.Text;
}


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x