在RowCommand事件中怎样读取GridView中某字段的值?
我在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应该怎么写?
------解决方案--------------------看你自己的 e.CommandArgument 逻辑。
================================
一开始看到这里的时候就想说,你这个e.CommandArgument 去绑定字段是很不合理的,一般而言他绑定的是主键列或索引值 比如 CommandArgument= ' <%# Container.Row.RowIndex%> '
然后在执行删除的你需要的 <%# Eval( "AutoID ")完全可以根据主键列或索引找到,换而言之,你把这么重要的东西绑定到了一个不重要的东西上面,思路不好
------解决方案--------------------你写的是:
CommandArgument= ' <%# Eval( "AutoID ") %> '
那么就按照这个查询数据源或者数据库。
如果写成:
CommandArgument= ' <%# Container.DataItemIndex %> '
其实更灵活一些。