日期:2014-05-18  浏览次数:20425 次

在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 %> '
其实更灵活一些。