执行完删除后用BindDataGrid2时出错,记录已经删除。
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.DataGrid DataGrid2;
private DataSet GetDataSet(string sql)
{
string constring=System.Configuration.ConfigurationSettings.AppSettings["conn1"];
OleDbDataAdapter    sda =new OleDbDataAdapter(sql,constring);
DataSet ds=new DataSet();
sda.Fill(ds);
return ds;
} private void BindDataGrid1()
{
string sql="select id,title,UpdateTime from news as t where exists (select * from lyb as ta where ta.fid=t.id)";  
DataSet ds=GetDataSet(sql);
this.DataGrid1.DataSource=ds;
this.DataGrid1.DataBind();
}
private void BindDataGrid2(DataGrid grid2)
{ string sql="select nr,sj,id from lyb where fid = "+DataGrid1.DataKeys[Index]+" order by id desc";
DataSet ds=GetDataSet(sql);
grid2.DataSource=ds;
grid2.DataBind();
}
private void Page_Load(object sender, System.EventArgs e)
{
//if (Session["user"]!=null && Session["user"].ToString() == "zc1")
//{ if (!IsPostBack)
{ BindDataGrid1();
//}
}
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
this.DataGrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated); }

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.DataGrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Item_Command);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.DataGrid1.Load += new System.EventHandler(this.Page_Load);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
{
DataGrid grid2 = (DataGrid)e.Item.FindControl( "DataGrid2" );
grid2.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler( this.grid2_ItemDataBound );
}
} protected void grid2_ItemDataBound(object sender, DataGridItemEventArgs e)
{
}
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType==ListItemType.Header)
  {
e.Item.Cells[0].ColumnSpan=2;//合并单元格
e.Item.Cells[1].Visible=false;
  }
if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
{                    
System.Web.UI.WebControls.ImageButton image = (System.Web.UI.WebControls.ImageButton)e.Item.FindControl("ImageButton1");
string sql="select nr,sj,id from lyb where fid ="+this.DataGrid1.DataKeys[e.Item.ItemIndex];
DataSet ds=GetDataSet(sql);
DataGrid grid=(DataGrid)e.Item.FindControl("DataGrid2");
grid.DataSource=ds;
grid.DataBind();
//grid.Style.Add("display","none");
} }
#region grid2_DeleteCommand
protected void grid2_DeleteCommand(object sender, DataGridCommandEventArgs e)
{
DataGrid grid2 = (DataGrid)sender;
DeleteGrid2(grid2.DataKeys[e.Item.ItemIndex].ToString());
grid2.EditItemIndex =-1;
BindDataGrid2(grid2);
} #endregion
        
#region DeleteGrid2
private void DeleteGrid2(string id)
{
OleDbConnection conn=new OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings["Conn1"]);
OleDbCommand comm=new OleDbCommand("delete from lyb where ID="+id+"",conn);
//OleDbParameter parm1=new OleDbParameter("@StudentID",OleDbDbType.NVarChar,50);
//parm1.Value=id;
//comm.Parameters.Add(parm1); //int bianhao = Convert.ToInt32(grid2.DataKeys[e.Item.ItemIndex]); 
//string sql = "Delete from lyb where id=" + bianhao; 
//executesql(sql);  conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
#endregion #region property
private int Index
{
get
{
if(ViewState["Index"]!=null && ViewState["Index"].ToString()!="")
{
return Convert.ToInt32(ViewState["Index"]);
}
else
{
return -1;
}
}
set
{
ViewState["Index"]=value;
}
}
#endregion #region Item_Command
protected void Item_Command(object sender,DataGridCommandEventArgs e)
{
Index=e.Item.ItemIndex;
// System.Web.UI.WebControls.ImageButton image = (System.Web.UI.WebControls.ImageButton)e.Item.FindControl("ImageButton1");
DataGrid grid=(DataGrid)e.Item.FindControl("DataGrid2");
// if(image.ImageUrl=="add.gif")
// {
//image.ImageUrl="sub.gif";
// grid.Style.Add("display","block");
// }
// else
// {
// image.ImageUrl="add.gif";
// grid.Style.Add("display","none");
//}
}
#endregion

解决方案 »

  1.   

    已经设2个DataGrid的DataKeys都为id
      

  2.   

    string sql="select nr,sj,id from lyb where fid = "+DataGrid1.DataKeys[Index]+" order by id desc";#region property
    private int Index
    {
    get
    {
    if(ViewState["Index"]!=null && ViewState["Index"].ToString()!="")
    {
    return Convert.ToInt32(ViewState["Index"]);
    }
    else
    {
    return -1;
    }
    }
    set
    {
    ViewState["Index"]=value;
    }
    }Index返回了-1
    在第一句前加上
    if(Index == -1)
      return;
    string sql="select nr,sj,id from lyb where fid = "+DataGrid1.DataKeys[Index]+" order by id desc";
      

  3.   

    to :Red_angelX如果加了if(Index == -1)
      return;出错信息是没了,但删除数据以后不重新绑定,删除的数据还显示呢。。怎么办,代码是不是有什么问题。。
      

  4.   

    DataGrid1.DataKeys[Index]现在找不到啊????怎么绑定