为什么在GridView的RowDataBound中动态添加的Button无法触发事件 为什么在GridView的RowDataBound中动态添加的Button无法触发事件? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你段代码,你自己看看吧 <asp:GridView ID="GridView1" runat="server" CellPadding="3" DataKeyNames="Id" GridLines="None" BackColor="Black" CellSpacing="1" Width="95%" AutoGenerateColumns="False" AllowSorting="True" OnRowDataBound="GridView1_RowDataBound"> <asp:TemplateField HeaderText="选择"> <ItemTemplate> <asp:Button ID="btnSelect" runat="server" Text="编辑" OnClick="btnSelect_Click" /> <asp:Button ID="btnDel" runat="server" Text="删除" OnClick="btnDel_Click" /> </ItemTemplate> <ItemStyle Width="120px" /> </asp:TemplateField> </Columns> </asp:GridView>在ONclick 里面去写事件 RowDataBound能动态添加服务器控件?是button客户端控件吧? protected void gvlist_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { //gridviewStyle.rowAltColor(e, false, ""); int startCol = 4; string id = e.Row.Cells[startCol].Text.Trim(); e.Row.Cells[startCol].ToolTip = "查看明细"; e.Row.Cells[startCol].Attributes.Add("onclick", message.redirectUrl("add.aspx?id=" + id + userLoginData.menuUrl)); gridviewStyle.TableCellAltColor(e.Row.Cells[startCol], true, "#FEDA9C"); string newvalue = string.Empty; regDAL dal = new regDAL(); regModel model = new regModel(); int gvColCount = e.Row.Cells.Count; for (int i = startCol + 1; i < gvColCount; i++) { TableCell tcl = e.Row.Cells[i]; gridviewStyle.TableCellAltColor(tcl, false, "#EDFAFF"); string colTemp = tcl.Text.Trim(); if (colTemp.Length == 0) { continue; } string[] arrColTemp = colTemp.Split(','); int usertotal = arrColTemp.Length; int userqs = 0, userqsNo = 0; for (int j = 0; j < usertotal; j++) { if (arrColTemp[j] == null) continue; string _arrColTemp = arrColTemp[j].ToString().Trim(); if (_arrColTemp.Length == 0) continue; string[] arr_arrColTemp = _arrColTemp.Split(':'); if (arr_arrColTemp.Length < 3) continue; if (arr_arrColTemp[0] == null || arr_arrColTemp[1] == null || arr_arrColTemp[2] == null) continue; string arr_userno = arr_arrColTemp[0].ToString().Trim(); if (arr_userno.Length == 0) continue; if (arr_arrColTemp[1] == null || arr_arrColTemp[1].ToString().Trim().Length == 0) { if (userLoginData.sesUser.Equals(arr_userno)) { Button btnuser = new Button(); btnuser.Text = "签收"; btnuser.ToolTip = "签收此单据|" + arr_userno + "|" + id; btnuser.Click += new EventHandler(btnuser_Click);//此处绑定的事件不起作用!!! tcl.Controls.Add(btnuser); } else { model = dal.GetModel(arr_userno); if (model == null) continue; Label lbluser = new Label(); lbluser.Text = model.name + " "; lbluser.CssClass = "fontColor"; lbluser.ToolTip = "待签|" + arr_userno; tcl.Controls.Add(lbluser); } userqsNo++; } else { string arr_userQs = arr_arrColTemp[1].ToString().Trim(); string arr_userDate = arr_arrColTemp[2].ToString().Trim(); model = dal.GetModel(arr_userQs); if (model == null) continue; Label lbluserQs = new Label(); lbluserQs.Text = model.name + " "; lbluserQs.CssClass = "treeGreen"; lbluserQs.ToolTip = "已签|" + arr_userDate + "|" + arr_userQs; tcl.Controls.Add(lbluserQs); userqs++; } } if (userqsNo > 0 || userqs > 0) { if (userqs == usertotal) { tcl.ToolTip = "签收完成"; tcl.BackColor = System.Drawing.Color.FromArgb(108, 194, 47); } else if (userqs == 0) { tcl.ToolTip = "未签收"; tcl.BackColor = System.Drawing.Color.FromArgb(255, 227, 229); } else if (userqs < usertotal) { tcl.ToolTip = "签收中"; tcl.BackColor = System.Drawing.Color.FromArgb(206, 201, 255); } } else { tcl.BackColor = System.Drawing.Color.FromArgb(222, 222, 222); tcl.ToolTip = "无需签收"; } } } } protected void btnuser_Click(object sender, EventArgs e) { Button btn = (Button)sender; string ma02 = btn.ToolTip.Trim(); string[] _Arr = ma02.Split('|'); if (_Arr.Length < 3) return; if (_Arr[2] == null) return; string SH002 = _Arr[2].ToString().Trim(); if (SH002.Length == 0) return; WPURMSHandOutDal dal = new WPURMSHandOutDal(); WPURMSHandOutModel model = new WPURMSHandOutModel(); model.SH002 = SH002; model.SH004 = SH002; model.SH005 = _Arr[1].ToString().Trim(); int rv = dal.HandOutSign(model); //getAllData(); SystemTools.displayTips("签收处理[" + SH002 + "]成功!", 1, lblInfoMsg); }代码如上面。因GridView的列是不定的,里面的按钮也是动态生成的!但是事件不起作用啊! 断点进去 委托是否绑定成功?如果绑定成功。请检查一下。 生成的Buttom 上是否有链接?运行下 看看 状态栏 有没地址? 先alter一下估计是某个地方手误写错了 出现这个问题主要是:你的控件状态没有被TrackViewState()方法跟踪。你应该是先把控件添加到页面的控件树中后再去设置他的属性和事件。这样TrackViewState()方法会自动记录你的控件状态。建议你试试写在row_create事件下并把添加代码改下为Button btnuser = new Button();tcl.Controls.Add(btnuser); btnuser.Text = "签收"; btnuser.ToolTip = "签收此单据|" + arr_userno + "|" + id; btnuser.Click += new EventHandler(btnuser_Click);//此处绑定的事件不起作用!!! protected void Page_Load(object sender, EventArgs e) { this.Button1.Click += new EventHandler(bt_Click); } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //// this.Button1.Click += new EventHandler(bt_Click); } protected void bt_Click(object sender, EventArgs e) { Response.Write("成功"); }做了个测试。在GridView中绑定事件委托。 但是 GridView的委托类型是 GridViewRowEventArgsButton1.Click 的委托类型是 EventArgs 先触发的是 GridViewRowEventArgs 自然做不到 Click 事件 我把他 写在 Load事件里 就触发成功了。! 谢谢!搞定!!但这样每次都需要重新绑定GridView!不过还是谢谢了!!! 怎么实现后台更换模板啊 请问,那个通用的象SQLServer的帮助模块菜单,是怎么搞的啊, 我想用c#三层结构的oa换c#三层结构的全站程序学习。 再次郁闷,大侠帮忙 如何读取客户端文件? ★★★★动态控制新闻分类是否在首页显示否.要思路★★★ WebServices中的中文乱码问题? 将表记录转换成按列排列????? 一个初学者问题(在线等候) VS.NET:可以创建ASP.NET解决方案,但无法调试 未知的服务器标记 “ajaxToolkit:ValidatorCalloutExtender” DataTable筛选的问题
BackColor="Black" CellSpacing="1" Width="95%" AutoGenerateColumns="False" AllowSorting="True"
OnRowDataBound="GridView1_RowDataBound">
<asp:TemplateField HeaderText="选择">
<ItemTemplate>
<asp:Button ID="btnSelect" runat="server" Text="编辑" OnClick="btnSelect_Click" />
<asp:Button ID="btnDel" runat="server" Text="删除" OnClick="btnDel_Click" />
</ItemTemplate>
<ItemStyle Width="120px" />
</asp:TemplateField>
</Columns>
</asp:GridView>在ONclick 里面去写事件
能动态添加服务器控件?
是button客户端控件吧?
protected void gvlist_RowDataBound(object sender, GridViewRowEventArgs e)
{ if (e.Row.RowType == DataControlRowType.DataRow)
{
//gridviewStyle.rowAltColor(e, false, ""); int startCol = 4;
string id = e.Row.Cells[startCol].Text.Trim();
e.Row.Cells[startCol].ToolTip = "查看明细";
e.Row.Cells[startCol].Attributes.Add("onclick", message.redirectUrl("add.aspx?id=" + id + userLoginData.menuUrl));
gridviewStyle.TableCellAltColor(e.Row.Cells[startCol], true, "#FEDA9C"); string newvalue = string.Empty;
regDAL dal = new regDAL();
regModel model = new regModel();
int gvColCount = e.Row.Cells.Count;
for (int i = startCol + 1; i < gvColCount; i++)
{
TableCell tcl = e.Row.Cells[i];
gridviewStyle.TableCellAltColor(tcl, false, "#EDFAFF");
string colTemp = tcl.Text.Trim();
if (colTemp.Length == 0) { continue; } string[] arrColTemp = colTemp.Split(',');
int usertotal = arrColTemp.Length;
int userqs = 0, userqsNo = 0;
for (int j = 0; j < usertotal; j++)
{
if (arrColTemp[j] == null) continue;
string _arrColTemp = arrColTemp[j].ToString().Trim();
if (_arrColTemp.Length == 0) continue;
string[] arr_arrColTemp = _arrColTemp.Split(':'); if (arr_arrColTemp.Length < 3) continue; if (arr_arrColTemp[0] == null || arr_arrColTemp[1] == null || arr_arrColTemp[2] == null) continue;
string arr_userno = arr_arrColTemp[0].ToString().Trim();
if (arr_userno.Length == 0) continue; if (arr_arrColTemp[1] == null || arr_arrColTemp[1].ToString().Trim().Length == 0)
{
if (userLoginData.sesUser.Equals(arr_userno))
{
Button btnuser = new Button();
btnuser.Text = "签收";
btnuser.ToolTip = "签收此单据|" + arr_userno + "|" + id;
btnuser.Click += new EventHandler(btnuser_Click);//此处绑定的事件不起作用!!!
tcl.Controls.Add(btnuser);
}
else
{
model = dal.GetModel(arr_userno);
if (model == null) continue;
Label lbluser = new Label();
lbluser.Text = model.name + " ";
lbluser.CssClass = "fontColor";
lbluser.ToolTip = "待签|" + arr_userno;
tcl.Controls.Add(lbluser);
}
userqsNo++;
}
else
{
string arr_userQs = arr_arrColTemp[1].ToString().Trim();
string arr_userDate = arr_arrColTemp[2].ToString().Trim();
model = dal.GetModel(arr_userQs);
if (model == null) continue;
Label lbluserQs = new Label();
lbluserQs.Text = model.name + " ";
lbluserQs.CssClass = "treeGreen";
lbluserQs.ToolTip = "已签|" + arr_userDate + "|" + arr_userQs;
tcl.Controls.Add(lbluserQs);
userqs++;
}
}
if (userqsNo > 0 || userqs > 0)
{
if (userqs == usertotal) { tcl.ToolTip = "签收完成"; tcl.BackColor = System.Drawing.Color.FromArgb(108, 194, 47); }
else if (userqs == 0) { tcl.ToolTip = "未签收"; tcl.BackColor = System.Drawing.Color.FromArgb(255, 227, 229); }
else if (userqs < usertotal) { tcl.ToolTip = "签收中"; tcl.BackColor = System.Drawing.Color.FromArgb(206, 201, 255); }
}
else
{
tcl.BackColor = System.Drawing.Color.FromArgb(222, 222, 222);
tcl.ToolTip = "无需签收";
}
}
}
}
protected void btnuser_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
string ma02 = btn.ToolTip.Trim();
string[] _Arr = ma02.Split('|');
if (_Arr.Length < 3) return;
if (_Arr[2] == null) return;
string SH002 = _Arr[2].ToString().Trim();
if (SH002.Length == 0) return; WPURMSHandOutDal dal = new WPURMSHandOutDal();
WPURMSHandOutModel model = new WPURMSHandOutModel();
model.SH002 = SH002;
model.SH004 = SH002;
model.SH005 = _Arr[1].ToString().Trim();
int rv = dal.HandOutSign(model); //getAllData(); SystemTools.displayTips("签收处理[" + SH002 + "]成功!", 1, lblInfoMsg);
}代码如上面。因GridView的列是不定的,里面的按钮也是动态生成的!但是事件不起作用啊!
断点进去 委托是否绑定成功?如果绑定成功。请检查一下。 生成的Buttom 上是否有链接?
运行下 看看 状态栏 有没地址?
你的控件状态没有被TrackViewState()方法跟踪。你应该是先把控件添加到页面的控件树中后再去设置他的属性和事件。这样TrackViewState()方法会自动记录你的控件状态。
建议你试试写在row_create事件下
并把添加代码改下为Button btnuser = new Button();
tcl.Controls.Add(btnuser); btnuser.Text = "签收";
btnuser.ToolTip = "签收此单据|" + arr_userno + "|" + id;
btnuser.Click += new EventHandler(btnuser_Click);//此处绑定的事件不起作用!!!
{
this.Button1.Click += new EventHandler(bt_Click);
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
////
this.Button1.Click += new EventHandler(bt_Click);
} protected void bt_Click(object sender, EventArgs e)
{
Response.Write("成功");
}做了个测试。在GridView中
绑定事件委托。
但是 GridView的委托类型是 GridViewRowEventArgs
Button1.Click 的委托类型是 EventArgs 先触发的是 GridViewRowEventArgs 自然做不到 Click 事件 我把他 写在 Load事件里 就触发成功了。!
谢谢!搞定!!
但这样每次都需要重新绑定GridView!
不过还是谢谢了!!!