在RowCommand事件中怎样读取GridView中某字段的值?

Cassava 2007-08-08 12:03:57
我在GridView中添加一个删除的模板列
<asp:TemplateField HeaderText="删除">
<ItemTemplate>
<SPAN onclick="return window.confirm('你确定要删除该记录吗?')">
<asp:LinkButton ID="LinkButton1" CommandName="Del" CommandArgument='<%# Eval("AutoID") %>' runat="server" Text="删除"></asp:LinkButton>
</SPAN>
</ItemTemplate>
</asp:TemplateField>
还有一个DataField列
<asp:BoundField DataField="IsAdminRole" HeaderText="系统默认角色" />
后台删除代码
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "Del": //删除数据
if(e.Item.Cells[0].Text.Trim()=="True") //判断是不是系统的默认角色,这样写是错误的,应该怎么写呢?
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "alert('该角色为系统默认角色不可以删除 !')", true);
else
conn.ExeSql("delete " + TableName + " where AutoID=" + e.CommandArgument.ToString());
break;
}
GridView1.DataBind();
}

即怎样才能在RowCommand事件中取得IsAdminRole字段的值?在VS2003中是可以这样写的e.Item.Cells[0].Text.Trim(),不知道在VS2005应该怎么写?
...全文
1925 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
hecong875 2007-10-22
  • 打赏
  • 举报
回复
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow RowData = GridView_CertificateState.Rows[index];

Label_ID.Text = RowData.Cells[1].Text.ToString();//获取对应行第二列的单元格数据

TextBox_CertificateState.Text = RowData.Cells[2].Text.ToString();
为什么我点不出 CELLS
showmy 2007-08-08
  • 打赏
  • 举报
回复
都说完了 JF up
GridView1.Rows[e.RowIndex].Cells[列名].Text
michaelowenii 2007-08-08
  • 打赏
  • 举报
回复
GridView1.Rows[e.RowIndex].Cells[列名].Text
Jinglecat 2007-08-08
  • 打赏
  • 举报
回复
即怎样才能在RowCommand事件中取得IsAdminRole字段的值?在VS2003中是可以这样写的e.Item.Cells[0].Text.Trim(),不知道在VS2005应该怎么写?

========

方法比较多, GridView 的 Command 事件中无法象 DataGrid 那样直接获取行,

法1,
Control cmdControl = e.CommandSource as Control;
row = cmdControl.NamingContainer as GridViewRow;
string str = row.Cell[0].Text;
// .....

更多信息见:
ASP.NET DEMO 5:如何在GridView的RowCommand事件中获取当前的GridViewRow
http://www.cnblogs.com/Jinglecat/archive/2007/07/05/806460.html

zwwlovezy1 2007-08-08
  • 打赏
  • 举报
回复
GridView1.Rows[e.RowIndex].Cells[列名].Text
孟子E章 2007-08-08
  • 打赏
  • 举报
回复
e.Row.
jeff_stone 2007-08-08
  • 打赏
  • 举报
回复
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow RowData = GridView_CertificateState.Rows[index];

Label_ID.Text = RowData.Cells[1].Text.ToString();//获取对应行第二列的单元格数据

TextBox_CertificateState.Text = RowData.Cells[2].Text.ToString();
//获取对应行第三列的单元格数据

godgreat 2007-08-08
  • 打赏
  • 举报
回复
shit
godgreat 2007-08-08
  • 打赏
  • 举报
回复
to Cassava(车超)
在RowCommand事件中是没有e.Row的属性的,在RowDataBound中才有e.Row
非常感谢各位的帮助
-------
试下我的方法
Cassava 2007-08-08
  • 打赏
  • 举报
回复
在RowCommand事件中是没有e.Row的属性的,在RowDataBound中才有e.Row
非常感谢各位的帮助
  • 打赏
  • 举报
回复
哦,打字时没有注意到看到上面已经回答了,呵呵。
  • 打赏
  • 举报
回复
你写的是:
CommandArgument='<%# Eval("AutoID") %>'
那么就按照这个查询数据源或者数据库。

如果写成:
CommandArgument='<%# Container.DataItemIndex %>'
其实更灵活一些。
amandag 2007-08-08
  • 打赏
  • 举报
回复
看你自己的 e.CommandArgument 逻辑。
================================
一开始看到这里的时候就想说,你这个e.CommandArgument 去绑定字段是很不合理的,一般而言他绑定的是主键列或索引值 比如 CommandArgument='<%# Container.Row.RowIndex%>'

然后在执行删除的你需要的<%# Eval("AutoID")完全可以根据主键列或索引找到,换而言之,你把这么重要的东西绑定到了一个不重要的东西上面,思路不好
  • 打赏
  • 举报
回复
看你自己的 e.CommandArgument 逻辑。
WNASP 2007-08-08
  • 打赏
  • 举报
回复
都说完了,俺就接分了!
typ668 2007-08-08
  • 打赏
  • 举报
回复
楼上的都说了
godgreat 2007-08-08
  • 打赏
  • 举报
回复
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int nIdx = Convert.ToInt32(e.CommandArgument.ToString());

GridViewRow row = this.GridView1.Rows[nIdx];

string strFID = row.Cells[0].Text;
try
{
switch (e.CommandName)
{
case "upd":
//..........
break;
case "del":
//...........
break;
}
}
catch (Exception ex)
{
EScript.PopEx(this, "GridView1_RowCommand", "数据处理时出错:\\n" + ex.Message);
}
}
------------------------------------------
string strFID = row.Cells
  • .Text; //*写上你IsAdminRole字段index下标从0开始,自己去前台数
海阔天空 2007-08-08
  • 打赏
  • 举报
回复
这要看你用的是什么了,用的模版列的话((TextBox)GridView1.Rows[e.RowIndex].Cells[列].Controls[0]).Text这样好用一些!
godgreat 2007-08-08
  • 打赏
  • 举报
回复
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int nIdx = Convert.ToInt32(e.CommandArgument.ToString());

GridViewRow row = this.GridView1.Rows[nIdx];

string strFID = row.Cells[0].Text;
try
{
switch (e.CommandName)
{
case "upd":
//..........
break;
case "del":
//...........
break;
}
}
catch (Exception ex)
{
EScript.PopEx(this, "GridView1_RowCommand", "数据处理时出错:\\n" + ex.Message);
}
}
shilei831115 2007-08-08
  • 打赏
  • 举报
回复
http://shilei831115.blog.hexun.com/7783567_d.html]

呵呵 接分
加载更多回复(4)
在单击 GridView 控件的按钮时,将引发 RowCommand 事件GridView 控件具有内置功能,用于进行编辑、删除和分页等操作。 还可以添加按钮并使用 RowCommand 事件向控件添加自定义功能。 可以通过下面的方式向 GridView 控件添加自定义功能: 向 GridView 控件添加 ButtonField 字段。 向 GridView 控件的模板添加 Button、LinkButton 或 ImageButton 控件。 可以使用事件参数的 CommandName 属性在事件处理程序方法标识按钮的功能。 如果使用的是 ButtonField 或 TemplateField 对象,则还可以使用 CommandArgument 属性来标识当前行。 使用的是 ButtonField 对象时,CommandArgument 属性自动设置为行索引。 使用的是 TemplateField 对象时,控件不会自动设置 CommandArgument 属性。 在这种情况下,如果必须在事件处理程序确定行索引,则可以使用数据绑定表达式将该按钮的 CommandArgument 属性设置为行索引。 响应 GridView 控件的按钮事件 将按钮的 CommandName 属性设置为标识其功能的字符串,如“打印”或“复制”。 如果使用的是 TemplateField 对象并且必须在事件处理程序方法访问行索引,则将按钮的 CommandArgument 属性设置为标识当前行的表达式。 下面的示例演示如何将 TemplateField 列某个按钮的 CommandArgument 属性设置为当前行索引。 在该示例,该列包含一个显示购物车的 Button 控件。 VBC#C++F#JScript 复制不支持该语言或没有可用的代码示例。 VBC#C++F#JScript 复制 CommandName="AddToCart" CommandArgument="" Text="Add to Cart" /> 为 GridView 控件的 RowCommand 事件创建一个方法。 在该方法,执行下列操作: 检查事件参数对象的 CommandName 属性来查看传入什么字符串。 如果需要,使用 CommandArgument 属性检索包含该按钮的行的索引。 为用户单击的按钮执行相应的逻辑。 下面的示例演示响应 GridView 控件的按钮单击的方法。 在该示例,TemplateField 列的按钮发送命令“AddToCart”。 RowCommand 事件处理程序确定被单击的按钮。 如果被单击的是购物车按钮,则代码执行相应的逻辑。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧