GridView中的编辑和删除按钮获取当前行的非主键字段的值

GridView控件绑定了一个Flag字段,值如下:0-未审核,1-审核通过,2-审核未通过,数据库中保存的是编号,而GridView中显示的是对应的名称。
要在编辑或删除前需要获取Flag编号,则有两种情况:(在RowDataBound事件中使用DataBinder.Eval(e.Row.DataItem, "Flag").ToString();获取)
(1)如果GridView在显示中未进行转换,直接显示编号,则在编辑或删除时要获取编号值,很简单
在RowDeleting事件中使用GridView.Rows[e.RowIndex].Cells[n].Text
在RowEditing事件中使用GridView.Rows[e.NewEditIndex].Cells[n].Text
(2)如果GridView在显示时进行了转换,显示的不是编号而是对应的汉字,如果还想在编辑或删除时获取编号,此编号又不是主键,可以通过给编辑或删除按钮设置CommandArgument来实现。
HTML中:
< asp:TemplateField HeaderText = " 编辑 " >
                                        
< EditItemTemplate >
                                            
< asp:LinkButton ID = " lbtnUpdate "  runat = " server "  CommandName = " Update " > 更新 </ asp:LinkButton >
                                            
< asp:LinkButton ID = " lbtnCancel "  runat = " server "  CausesValidation = " False "  CommandName = " Cancel " > 取消 </ asp:LinkButton >
                                        
</ EditItemTemplate >
                                        
< ItemTemplate >
                                            
< asp:ImageButton ID = " ImageButton1 "  runat = " server "  CausesValidation = " False "  CommandArgument = ' <%# DataBinder.Eval(Container.DataItem,"Flag") %> '
                                                ImageUrl
= " ~/Images/edit.gif "  CommandName = " Edit "   />
                                        
</ ItemTemplate >
                                    
</ asp:TemplateField >
                                    
< asp:TemplateField HeaderText = " 删除 " >
                                        
< ItemTemplate >
                                            
< asp:ImageButton ID = " lbtnDelete "  runat = " server "  CausesValidation = " False "  CommandName = " Delete "  CommandArgument = ' <%# DataBinder.Eval(Container.DataItem,"Flag") %> '
                                                ImageUrl
= " ~/Images/delete.gif "  OnClientClick = " return confirm('确定要删除吗?') "   />
                                        
</ ItemTemplate >
                                    
</ asp:TemplateField >
C#中:
  protected   void  gvReward_RowDeleting( object  sender, GridViewDeleteEventArgs e)
    {
        
string  strFlag  =  ((ImageButton)gvReward.Rows[e.RowIndex].FindControl( " lbtnDelete " )).CommandArgument; // 在HTML中设置了CommandArgument,使其绑定了Falg字段的值
        
// string strFlag = gvReward.Rows[e.RowIndex].Cells[7].Text.ToString().Trim(); // 获取当前行中被绑定的‘Flag’字段的值
         if  (strFlag  ==   " 1 " )
        {
            ScriptManager.RegisterStartupScript(
this .Page,  typeof (Page),  "" " alert('此信息学工处已审核通过,不允许删除') " true );
        }
        
else
        {
            
int  iID  =  Convert.ToInt32(gvReward.DataKeys[e.RowIndex].Value);
            
try
            {
                
if  (StudentReward.RemoveRewardList(iID))
                {
                    ScriptManager.RegisterStartupScript(
this .Page,  typeof (Page),  "" " alert('删除成功') " true );
                    BindGridView();
                }
                
else
                {
                    ScriptManager.RegisterStartupScript(
this .Page,  typeof (Page),  "" " alert('删除失败') " true );
                }
            }
            
catch  (Exception ex)
            {
                ScriptManager.RegisterStartupScript(
this .Page,  typeof (Page),  "" " alert('删除出现异常') " true );
            }
        }
    }
  protected   void  gvReward_RowEditing( object  sender, GridViewEditEventArgs e)
    {
        
string  strFlag  =  ((ImageButton)gvReward.Rows[e.NewEditIndex].FindControl( " ImageButton1 " )).CommandArgument; // 在HTML中设置了CommandArgument,使其绑定了Falg字段的值
         if  (strFlag  ==   " 1 " // 审核没通过的,也可以修改,不过此时审核状态需要同时修改为“0”未审核
        {
            ScriptManager.RegisterStartupScript(
this .Page,  typeof (Page),  "" " alert('此信息学工处已审核通过,不允许修改') " true );
        }
        
else
        {
            gvReward.EditIndex 
=  e.NewEditIndex;
            BindGridView();
        }
    }

你可能感兴趣的:(GridView)