Hi robertrack,
You can not catch the event like the way you are doing.
Set the click event in aspx page.
HTML
<asp:ImageButton ID="ipb" runat="server" ImageUrl="~/BlueButton.jpg" />
<br />
<asp:Label ID="lbl" runat="server" Text="(Nothing yet)" />
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False"
EmptyDataText="--==>> No Data Found <<==--" >
<Columns>
<asp:TemplateField>
<HeaderTemplate>
Name
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
Buttons
</HeaderTemplate>
<ItemTemplate>
<asp:ImageButton ID="ipbB" runat="server" ImageUrl="~/BlueButton.jpg" OnClick="ipbB_Click" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
Result
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblB" runat="server" Text="(Nothing Yet)" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
ipb.Click += ipb_Click;
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "Russia");
gv.DataSource = dt;
gv.DataBind();
}
}
protected void ipb_Click(object sender, ImageClickEventArgs e)
{
lbl.Text = "Button clicked " + DateTime.Now.ToString();
}
protected void ipbB_Click(object sender, ImageClickEventArgs e)
{
ImageButton ib = (ImageButton)sender;
GridViewRow gr = (GridViewRow)ib.NamingContainer;
Label lblB = (Label)gr.FindControl("lblB");
lblB.Text = "Button clicked " + DateTime.Now.ToString();
}
Else you have to use RowCommand event of the GridView control.
HTML
<asp:ImageButton ID="ipb" runat="server" ImageUrl="~/BlueButton.jpg" />
<br />
<asp:Label ID="lbl" runat="server" Text="(Nothing yet)" />
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" EmptyDataText="--==>> No Data Found <<==--"
OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
Name
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
Buttons
</HeaderTemplate>
<ItemTemplate>
<asp:ImageButton ID="ipbB" runat="server" ImageUrl="~/BlueButton.jpg"
CommandName="Set" CommandArgument="<%# Container.DataItemIndex %>" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
Result
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblB" runat="server" Text="(Nothing Yet)" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
ipb.Click += ipb_Click;
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "Russia");
gv.DataSource = dt;
gv.DataBind();
}
}
protected void ipb_Click(object sender, ImageClickEventArgs e)
{
lbl.Text = "Button clicked " + DateTime.Now.ToString();
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Set")
{
int rowIndex = Convert.ToInt32(e.CommandArgument);
GridViewRow row = gv.Rows[rowIndex];
Label lblB = (Label)row.FindControl("lblB");
lblB.Text = "Button clicked " + DateTime.Now.ToString();
}
}
Screenshot