页面有一个datagrid的,实现了分页和在线编辑更新数据的功能.当从提交表单提交查询条件到DataGrid时,问题发生在更新那一块,发现当点击更新时,无论点哪条记录,都只能更新其中一条记录的数据.例如:1   aaa   22   更新
2   bbb   33   更新
3   ccc   44   更新我点击了第3条记录的更新,更新完毕后不会是第3条更新,会变为第1条或者第2条数据更新.应该是我用了ViewState的原因.有什么方法可以解决呢?谢谢!下面是代码:using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
namespace EDPStorage.Page
{
/// <summary>
/// StoreInQuery 的摘要说明。
/// </summary>
public class StoreInQuery : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid Mydg;
protected System.Web.UI.WebControls.LinkButton PageLast;
protected System.Web.UI.WebControls.LinkButton PageNext;
protected System.Web.UI.WebControls.LinkButton PagePrev;
protected System.Web.UI.HtmlControls.HtmlForm Form1;
protected System.Web.UI.WebControls.LinkButton PageFirst;
private readonly string SQLCONNECTIONSTRING=ConfigurationSettings.AppSettings["SQLCONNECTIONSTRING"].ToString();
private void Page_Load(object sender, System.EventArgs e)
{ if(!Page.IsPostBack)
{
StoreInQueryForm wf1;
wf1=(StoreInQueryForm)Context.Handler;
ViewState["QueryName"]=wf1.Name;
ViewState["StartDate"]=wf1.StartDate;
ViewState["EndDate"]=wf1.EndDate;
BindDataGrid();
IsFirstLastPage(); } }
private void BindDataGrid()
{ SqlConnection myConnection=new SqlConnection(SQLCONNECTIONSTRING);
SqlCommand myCommand=new SqlCommand("StoreInQuery",myConnection);
myCommand.CommandType=CommandType.StoredProcedure;
myCommand.Parameters.Add(new SqlParameter("@ID",SqlDbType.VarChar,50));
myCommand.Parameters.Add(new SqlParameter("@StartDate",SqlDbType.DateTime));
myCommand.Parameters.Add(new SqlParameter("@EndDate",SqlDbType.DateTime));
myCommand.Parameters["@ID"].Value=ViewState["QueryName"];
myCommand.Parameters["@StartDate"].Value=ViewState["StartDate"];
myCommand.Parameters["@EndDate"].Value=ViewState["EndDate"];
myConnection.Open();
SqlDataAdapter da=new SqlDataAdapter(myCommand);
DataSet ds=new DataSet();
da.Fill(ds);
Mydg.DataSource=ds;
Mydg.DataBind();
myConnection.Close();
} private void Mydg_PageIndexChanged(object source,System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
Mydg.CurrentPageIndex = e.NewPageIndex;
BindDataGrid();
}

private void PageCut_Click(object sender,System.EventArgs e)
{
string commangArg=((LinkButton)sender).CommandArgument;
switch(commangArg)
{
case "First":{Mydg.CurrentPageIndex = 0;break;}
case "Prev":{Mydg.CurrentPageIndex = (int)Math.Max(0,Mydg.CurrentPageIndex - 1);break;}
case "Next":{Mydg.CurrentPageIndex = (int)Math.Min(Mydg.PageCount - 1,Mydg.CurrentPageIndex + 1);break;}
case "Last":{Mydg.CurrentPageIndex = Mydg.PageCount - 1;break;}
default:{break;}
}
BindDataGrid();
IsFirstLastPage();
}
private void IsFirstLastPage()
{
if(Mydg.PageCount > 0)
{
if(Mydg.PageCount != 1)
{
if(Mydg.CurrentPageIndex == 0)
{
PagePrev.Enabled = false;
}
else
{
PagePrev.Enabled = true;
}
if(Mydg.CurrentPageIndex == Mydg.PageCount -1)
{
PageNext.Enabled = false;
}
else
{
PageNext.Enabled = true;
}
}
else
{
PagePrev.Enabled = false;
PageNext.Enabled = false;
}
}
else
{
PageFirst.Enabled = false;
PageLast.Enabled = false;
PageNext.Enabled = false;
PagePrev.Enabled = false;
}
}
private void Mydg_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{ Mydg.EditItemIndex=(int)e.Item.ItemIndex;
BindDataGrid();
} private void Mydg_CancelCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
Mydg.EditItemIndex=-1;
BindDataGrid();
} private void Mydg_UpdateCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
SqlConnection myConnection=new SqlConnection(SQLCONNECTIONSTRING);
string strSQL="Update StoreIn Set StoreIn_Date=@StoreIn_Date,Quantity=@Quantity,Unit=@Unit,Re=@Re Where ViewOrder=@ViewOrder";
SqlCommand myCommand=new SqlCommand(strSQL,myConnection);

myConnection.Open();

myCommand.Parameters.Add(new SqlParameter("@ViewOrder",SqlDbType.Int));
myCommand.Parameters.Add(new SqlParameter("@StoreIn_Date",SqlDbType.DateTime));
myCommand.Parameters.Add(new SqlParameter("@Quantity",SqlDbType.Int));
myCommand.Parameters.Add(new SqlParameter("@Unit",SqlDbType.VarChar,50));
myCommand.Parameters.Add(new SqlParameter("@Re",SqlDbType.VarChar,50));

myCommand.Parameters["@StoreIn_Date"].Value=((TextBox)e.Item.Cells[3].Controls[1]).Text;
myCommand.Parameters["@Quantity"].Value=((TextBox)e.Item.Cells[4].Controls[1]).Text;
myCommand.Parameters["@Unit"].Value=((TextBox)e.Item.Cells[5].Controls[1]).Text;
myCommand.Parameters["@Re"].Value=((TextBox)e.Item.Cells[6].Controls[1]).Text;
myCommand.Parameters["@ViewOrder"].Value=Convert.ToString(int.Parse(e.Item.ItemIndex.ToString()));  
myCommand.ExecuteNonQuery();
Mydg.EditItemIndex=-1;
myConnection.Close();
BindDataGrid(); } #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{   
this.Mydg.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.Mydg_PageIndexChanged);
this.Mydg.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Mydg_CancelCommand);
this.Mydg.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Mydg_EditCommand);
this.Mydg.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Mydg_UpdateCommand);
this.PageFirst.Click += new System.EventHandler(this.PageCut_Click);
this.PagePrev.Click += new System.EventHandler(this.PageCut_Click);
this.PageNext.Click += new System.EventHandler(this.PageCut_Click);
this.PageLast.Click += new System.EventHandler(this.PageCut_Click);
this.Load += new System.EventHandler(this.Page_Load); }
}
}
#endregion