在gridview2中有一个模板列,其中包含一个imagebutton,源码如下:
<asp:GridView ID="GridView2" runat="server" BorderStyle="None" CellPadding="3" AutoGenerateColumns="False" width="810px">
<RowStyle ForeColor="Black" />
<HeaderStyle Font-Bold="True" ForeColor="White" Height="24" HorizontalAlign="Center" VerticalAlign="Middle" CssClass="Freezing"/>
<Columns>
<asp:TemplateField HeaderText="删除" ItemStyle-Width="30" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" ImageUrl="~/images/gif/delete.gif"/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="m_code" HeaderText="物料代码">
<ItemStyle HorizontalAlign="center" Width="100px" Height="18px" />
</asp:BoundField>
<asp:BoundField DataField="m_name" HeaderText="资材名称">
<ItemStyle HorizontalAlign="left" Width="150px" Height="18px" />
</asp:BoundField>
<asp:BoundField DataField="m_type" HeaderText="型号规格">
<ItemStyle HorizontalAlign="left" Width="200px" Height="18px" />
</asp:BoundField>
<asp:BoundField DataField="m_unit" HeaderText="单位">
<ItemStyle HorizontalAlign="center" Width="40px" Height="18px" />
</asp:BoundField>
</Columns>
</asp:GridView>
imagebutton1的动作如下:
protected void ImageButton1_Click(object sender, EventArgs e)
{
string kkk = this.GSN.Text;
for (int i = 0; i <= GridView2.Rows.Count - 1; i++)
{
ImageButton Ibutton = (ImageButton)GridView2.Rows[i].FindControl("ImageButton1");
string kk = GridView2.DataKeys[i].Value.ToString();
if (Ibutton.Click == true)
{
kkk = kkk.Remove(kkk.IndexOf(kk) - 1, kk.Length + 1);
}
}
this.GSN.Text = kkk;
}
现在的问题是如何判断Ibutton是否被点击?我写的是不行的。
GridView添加RowCommand事件
<asp:GridView ID="GridView2" runat="server" OnRowCommand="GridView2_RowCommand"
<asp:ImageButton ID="ImageButton1" runat="server" CommandName="delete" CommandArgument=' <%# Eval("m_code") %>' OnClick="ImageButton1_Click" ImageUrl="~/images/gif/delete.gif"/>
-
C# code
-
protected void GridView2_RowCommand( object sender, GridViewCommandEventArgs e) { if (e.CommandName.ToLower() == " delete " ) // 点击了ImageButton1 { string id = e.CommandArgument.ToString(); // 物料物料代码 } }
ImageButton1_Click事件去掉
<asp:ImageButton ID="ImageButton1" runat="server" CommandName="delete" CommandArgument=' <%# Eval("m_code") %>' ImageUrl="~/images/gif/delete.gif"/>protected void ImageButton1_Click(object sender, EventArgs e) { GridViewRow gvr = (sender as ImageButton).NamingContainer as GridViewRow; if(gvr != null) { Response.Write("点击的行索引是:" + gvr.RowIndex); } }protected void ImageButton1_Click(object sender, EventArgs e) { string kkk = this.GSN.Text; for (int i = 0; i <= GridView2.Rows.Count - 1; i++) { ImageButton Ibutton = (ImageButton)GridView2.Rows[i].FindControl("ImageButton1"); string kk = GridView2.DataKeys[i].Value.ToString(); if (ibutton == sender)//关键这一句 { kkk = kkk.Remove(kkk.IndexOf(kk) - 1, kk.Length + 1); } } this.GSN.Text = kkk; }protected void ImageButton1_Click(object sender, EventArgs e)
用 (sender as ImageButton)就是你点击的那个按钮,在数据绑定时给这个按钮加点记号就能分出来了。
或者用 (((sender as ImageButton).Parent.Parent) as GridViewRow).DataItemIndex 能取到点击按钮所在的行号。加入一列也是包含图象按钮的列,
转化为模板列
假如关键列是第一行,rowcomand事件,获取到关键字段的值并判断按纽的名字分别执行
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
//获取到操作的行索引
int index = Convert.ToInt32(e.CommandArgument);
//找到操作的那一行
GridViewRow selectRow = GridView1.Rows[index];
TableCell SelectMemberID = selectRow.Cells[0];
//可以根据按钮的名称分别执行程序
switch (e.CommandName)
{
case "addsalary":
myGetDefault.AddMemberSalary(SelectMemberID.Text);
break;
case "lowsalary":
myGetDefault.LowMemberSalary(SelectMemberID.Text);
break;
default:
break;
}
GetData();
}if (ibutton == sender)
要的就是这个效果,哈哈!
多谢!!!