关于GridView的RowCommand问题 我写了GridView的RowCommand事件,但是点击GridView中的某些按钮的时候,没有触发RowCommand事件,这是为什么啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 GridView1_RowDataBound 事件里 写东西了 贴出代码 楼主把你的代码贴出来看看,这个是我以前的呢可以参考一下,要用if(e.CommandName=="")来判断。。 protected void gvCourses_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Del") { try { int count = Convert.ToInt32(e.CommandArgument); StudentsInfo stu = new StudentsInfo(); stu.DeleteSyllabus(count); CoursesInfo cou = new CoursesInfo(count); cou.Delete(); tran.VoteCommit(); Banding(); } catch (Exception ex) { tran.VoteRollback(); throw ex; } } } //GridView中的行事件 protected void gvShow_RowCommand(object sender, GridViewCommandEventArgs e) { Response.Write("<script>alert('afsda');</script>"); int id = Convert.ToInt32(e.CommandArgument.ToString()); String cmdName = e.CommandName; ImageButton ib = (sender as ImageButton); GridViewRow row = ib.Parent.Parent as GridViewRow; int index = row.DataItemIndex; int upId = 0; int num = Convert.ToInt32((row.FindControl("LabelNum") as Label).Text); int downId = 0; switch (cmdName) { case "edit": { Response.Redirect("AddNews.aspx?id=" + id); break; } case "up": { if (index == 0) { upId = NewsBLL.GetIdByNum(num - 1); } else { GridViewRow row1 = gvShow.Rows[index - 1]; upId = Convert.ToInt32((row1.FindControl("LabelId") as Label).Text); } if (upId != 0) { int result = 0; result = NewsBLL.UpdateNum(id, 2); result += NewsBLL.UpdateNum(upId, 1); if (result > 0) { Common.showResult(this, "操作成功!", "NewsList.aspx?typeId=" + typeId); } else { Common.showResult(this, "由于某种原因,操作失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId); } } else { Common.showResult(this, "已经是第一条新闻!", "NewsList.aspx?typeId=" + typeId); } break; } case "down": { if (index == (gvShow.Rows.Count - 1)) { downId = NewsBLL.GetIdByNum(num + 1); } else { GridViewRow row1 = gvShow.Rows[index + 1]; downId = Convert.ToInt32((row1.FindControl("LabelId") as Label).Text); } if (downId != 0) { int result = 0; result = NewsBLL.UpdateNum(id, 1); result += NewsBLL.UpdateNum(downId, 2); if (result > 0) { Common.showResult(this, "操作成功!", "NewsList.aspx?typeId=" + typeId); } else { Common.showResult(this, "由于某种原因,操作失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId); } } else { Common.showResult(this, "已经是最后一条新闻,无法下移!", "NewsList.aspx?typeId=" + typeId); } break; } default: { int result = 0; result = NewsBLL.Dele(id); if (result > 0) { Common.showResult(this, "删除成功!", "NewsList.aspx?typeId=" + typeId); } else { Common.showResult(this, "由于某种原因删除失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId); } break; } } }上面的是代码 我设置断点的 都没有进到这个事件里面 页面上每调用这个方法吧。看看你控件上有没有写,OnRowCommand=”“事件 是不是你的button的CausesValidation被改成true,然后你页面又用了验证控件总不可能你的事件没跟你的gv关联吧。 gvShow_RowCommand有没有绑定给GridView? <asp:GridView ID="gvShow" runat="server" OnRowCommand="gvShow_RowCommand"></asp:GridView> 我在gridView中写了OnRowCommand="gvShow_RowCommand"; 我在GridView里面写的OnRowCommand="" 模板列中有些图片按钮 点击的时候他会自动触发这个事件吧根据不同的commandName处理不同的事件 是会触发的啊,你要写条件啊if(e.CommandName==="edit"){ //your code } 你要设置要点击控件的CommandName和CommandArgument值然后再RowCommand事件里判断 我页面前台有指定commandName 和commandArguments的 不清楚你这个具体问题是什么。试下别用手写指定事件。右建GRIDVIEW > 属性 > 事件 > 选中rowcommand,看后面的下拉列表中有可以调用的事件吗?有的话直接选中调用,没有的话创建个事件,把原来的代码copy过来吧 你没贴其他代码,猜测应该是你在Page_Load事件或Page_Init事件中对GridView进行了数据绑定,而没有判断PostBack造成的 你没贴其他代码,猜测应该是你在Page_Load事件或Page_Init事件中对GridView进行了数据绑定,而没有判断PostBack造成的 猜测应该是你Page_Load事件没处理IsPostBack,重新绑定gridview数据造成的检测你的数据绑定点,看看哪些是在rowcommand事件前发生的 或许也许大概 PageLoad出了问题。 可能是VS出了问题吧!同样的代码 重新写了一遍 就触发RowCommand事件了 ,在这里可以根据CommandName的不同,做出不同的处理,但是又出现了一个问题,怎样获得点击的这一行的行号啊?比方说是Button 触发了RowCommand事件 我在事件里面这样写Button btn=sender as Button;但是判断的时候btn为null 在RowCommand事件中获得Button应该是:Button btn = (Button)e.CommandSource; 他们都说在rowCommand事件里面直接写int index=Convert.toInt32(e.CommandArguments.toString());这样就可以了,但是我的Button是在ItemTemplate模板中的,而且我的Button绑定的是一个数据库中的字段,我想问一下,有没有办法让这个Button的CommandArgument同时绑定行下标和数据库中的一个字段啊? 这样不是还要再查一下数据库吗?我想直接获得某些信息(GridView中绑定的有)然后直接操作了。 获取了点击的Button,则就可以的到所在行号,得到所在行号,就可以得到某列的数值!!没必要用e..CommandArguments;代码如下: protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName.ToString() == "你的CommandName") { Button btn = (Button)e.CommandSource; int Index = ((GridViewRow)(btn.NamingContainer)).RowIndex;//获得行号 string str =GridView1.Rows[Index].Cells[1].Text;//获得第一列的值 } } cell[0]是第一列,列索引从0开始,楼上有点小错,呵呵 哦。。this.GridView1.EditIndex 或者 this.GridView1.SelectedIndex 这个获得的都是-1 还是 koukoujiayi的方法可行谢谢大家了 .net 2005 windows 应用程序的基础讲座 使用正则表达式的问题 GridView1 冻结标题行和指定列 asp.net mvc2 下拉框问题 asp1.1升级到2.0出的问题 DataGrid嵌套的数据绑定问题 刚刚开始用ASP.NET,一点不懂 关于ASP.NET2.0的登录问题 动态生成的checkbox如何得到的Checked值? (少林足球中的“救命啊!”) 请问 卢彦的《利用XML实现通用WEB报表打印》必须在客户端装.netframeworkk吗 视图的查询条件问题 类型转换问题
贴出代码
protected void gvCourses_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Del")
{
try
{
int count = Convert.ToInt32(e.CommandArgument);
StudentsInfo stu = new StudentsInfo();
stu.DeleteSyllabus(count);
CoursesInfo cou = new CoursesInfo(count);
cou.Delete();
tran.VoteCommit();
Banding();
}
catch (Exception ex)
{
tran.VoteRollback();
throw ex;
}
}
}
protected void gvShow_RowCommand(object sender, GridViewCommandEventArgs e)
{
Response.Write("<script>alert('afsda');</script>");
int id = Convert.ToInt32(e.CommandArgument.ToString());
String cmdName = e.CommandName;
ImageButton ib = (sender as ImageButton);
GridViewRow row = ib.Parent.Parent as GridViewRow;
int index = row.DataItemIndex;
int upId = 0;
int num = Convert.ToInt32((row.FindControl("LabelNum") as Label).Text);
int downId = 0;
switch (cmdName)
{
case "edit":
{
Response.Redirect("AddNews.aspx?id=" + id);
break;
}
case "up":
{
if (index == 0)
{
upId = NewsBLL.GetIdByNum(num - 1);
}
else
{
GridViewRow row1 = gvShow.Rows[index - 1];
upId = Convert.ToInt32((row1.FindControl("LabelId") as Label).Text);
}
if (upId != 0)
{
int result = 0;
result = NewsBLL.UpdateNum(id, 2);
result += NewsBLL.UpdateNum(upId, 1);
if (result > 0)
{
Common.showResult(this, "操作成功!", "NewsList.aspx?typeId=" + typeId);
}
else
{
Common.showResult(this, "由于某种原因,操作失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId);
}
}
else
{
Common.showResult(this, "已经是第一条新闻!", "NewsList.aspx?typeId=" + typeId);
}
break;
}
case "down":
{
if (index == (gvShow.Rows.Count - 1))
{
downId = NewsBLL.GetIdByNum(num + 1);
}
else
{
GridViewRow row1 = gvShow.Rows[index + 1];
downId = Convert.ToInt32((row1.FindControl("LabelId") as Label).Text);
}
if (downId != 0)
{
int result = 0;
result = NewsBLL.UpdateNum(id, 1);
result += NewsBLL.UpdateNum(downId, 2);
if (result > 0)
{
Common.showResult(this, "操作成功!", "NewsList.aspx?typeId=" + typeId);
}
else
{
Common.showResult(this, "由于某种原因,操作失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId);
}
}
else
{
Common.showResult(this, "已经是最后一条新闻,无法下移!", "NewsList.aspx?typeId=" + typeId);
}
break;
}
default:
{
int result = 0;
result = NewsBLL.Dele(id);
if (result > 0)
{
Common.showResult(this, "删除成功!", "NewsList.aspx?typeId=" + typeId);
}
else
{
Common.showResult(this, "由于某种原因删除失败,请稍后再试!", "NewsList.aspx?typeId=" + typeId);
}
break;
}
}
}
上面的是代码 我设置断点的 都没有进到这个事件里面
</asp:GridView>
模板列中有些图片按钮 点击的时候他会自动触发这个事件吧
根据不同的commandName处理不同的事件
是会触发的啊,你要写条件啊if(e.CommandName==="edit")
{
//your code
}
然后再RowCommand事件里判断
试下别用手写指定事件。
右建GRIDVIEW > 属性 > 事件 > 选中rowcommand,看后面的下拉列表中有可以调用的事件吗?
有的话直接选中调用,没有的话创建个事件,把原来的代码copy过来吧
检测你的数据绑定点,看看哪些是在rowcommand事件前发生的
Button btn = (Button)e.CommandSource;
没必要用e..CommandArguments;代码如下:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.ToString() == "你的CommandName")
{
Button btn = (Button)e.CommandSource;
int Index = ((GridViewRow)(btn.NamingContainer)).RowIndex;//获得行号
string str =GridView1.Rows[Index].Cells[1].Text;//获得第一列的值
}
}
谢谢大家了