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