default.aspx页面:<asp:GridView ID="GridView1" OnRowDataBound="GridView1_RowDataBound"> 
   <asp:BoundField .../>
   <asp:BoundField .../>
   ...
</asp:GridView>
<asp:Button ID="submit_All" runat="server" Text="提交所有记录"  CommandName="submitAll" OnCommand="btnSubmitAll" />
default.aspx.cs页面: protected string Plsp_AllId; //加一个成员变量protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
//数据绑定时触发事件,相应地修改某些值显示在用户界面上
{
  //将每一行记录的id的值用成员变量的值保存下来,以便后来修改记录时用到  
  Plsp_AllId += GridView1.DataKeys[e.Row.RowIndex].Values["ID"].ToString()+",";
    
}protected void btnSubmitAll(object sender, CommandEventArgs e) //当提交所有按钮触发的事件
{
   Response.Write("批量ID的值是:" + Plsp_AllId); 
}问题:当点击提交所有按钮后,显示
批量ID的值是也就是说PLsp_AllId总是为空,这是为什么?
我猜是到了按钮这个事件触发时,成员变量的值已经释放了?不知对不对?
如果不用这种办法,大家有什么更好的办法吗?谢谢!

解决方案 »

  1.   

    你还不理解asp.net的事件机制!!当事件结束的时候里面的变量也相应的被释放了!从开始到结束!
      

  2.   

    那有什么办法“保存” 一下GridView里显示的所有记录的Id值,等到提交按钮单击时调用呢?谢谢!
      

  3.   

    不要用临时的变量来存放值,可以用hidden控件或着viewstate,session
      

  4.   

    回复3楼:DataKeyNames的值当然已经设置好了哦。所以,在GridView1_RowDataBound()里用Response.Write(Plsp_AllId)的话,还是可以显示正常的。回复4楼:谢谢提醒,我试试,你若能再具体或给个例子就好啦。
      

  5.   

    4楼方法正确,我使用的是ViewState["PLSPID"]来保存函数之间的数值传递。结贴,给分!