How to get the button ID in GridView

  • Thread starter Thread starter Peter Afonin
  • Start date Start date
P

Peter Afonin

Hello,

My GridView has several buttons in defferent columns. When the button is
clicked, is there a way to get a clicked button ID in the
GridView_RowCommand event?

Thank you,

Peter
 
Thanks, Bryan.

This is one of my buttons:

<asp:ImageButton ID="ibDestroyC" runat="server"
ImageUrl="~/img/destroy2.PNG"
CommandName="Destroy" CommandArgument='<%# Container.DataItemIndex %>' />

On RowCommand I'm using the CommandArgument to get the row index,
CommandName to indicate the command that will be executed.

What I'm trying to get an ImageButton ID - "ibDestroyC".

Alternatively, if I could get the current column index - this would work for
me as well.

Peter
 
Brian,

Yes, I have 5 buttons with the same command name in one gridview, that's why
I want to get either the button name or the column index.

Of course there are alternative solutions - I can assign the different
command names, or use the Click event for each button, like this:

protected void ibCreateK_Click(object sender, ImageClickEventArgs e)
{
GridViewRow gvRow = (GridViewRow)(sender as Control).Parent.Parent;
int i = gvRow.RowIndex;
Label lblAction = (Label)gvRow.FindControl("lblKAction");
Label lblPlateNumber = (Label)gvRow.FindControl("lblInset2");
CreateDestroy(lblPlateNumber.Text, lblAction.Text, "K");

}

where CreateDestroy is an actual routine that needs to be executed to enter
the data into the database.

This will work, but it's pretty bulky and requires a lot of duplicated code
(I have 5 buttons with one CommandName ("Create") and 5 with another
("Destroy"). If I could extract the button name or get the column index I
could combine all this in one compact routine in the RowCommand event.

Thanks,

Peter
 
Yes, that's probably what I'll do.

I'm just surprised a little that there is no easy way to get the the button
name or column index, but I couldn't find anything either.

Thank you,

Peter
 
Peter Afonin said:
Hello,

My GridView has several buttons in defferent columns. When the button is
clicked, is there a way to get a clicked button ID in the
GridView_RowCommand event?

Thank you,

Peter

Hi...

Can you use this.. It returns the controlID for the control, that caused the
postback..

private string getPostBackControlName()
{
Control control = null;
//first we will check the "__EVENTTARGET" because if post back made
by the controls
//which used "_doPostBack" function also available in Request.Form
collection.
string ctrlname = Page.Request.Params["__EVENTTARGET"];
if (ctrlname != null && ctrlname != String.Empty)
{
control = Page.FindControl(ctrlname);
}
// if __EVENTTARGET is null, the control is a button type and we
need to
// iterate over the form collection to find it
else
{
string ctrlStr = String.Empty;
Control c = null;
foreach (string ctl in Page.Request.Form)
{
//handle ImageButton they having an additional
"quasi-property" in their Id which identifies
//mouse x and y coordinates
if (ctl.EndsWith(".x") || ctl.EndsWith(".y"))
{
ctrlStr = ctl.Substring(0, ctl.Length - 2);
c = Page.FindControl(ctrlStr);
}
else
{
c = Page.FindControl(ctl);
}
if (c is System.Web.UI.WebControls.Button ||
c is System.Web.UI.WebControls.ImageButton)
{
control = c;
break;
}
}
}
return control.ID;

}

/Finn
 
Back
Top