首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

datagrid删除数据时出现错误

2012-02-24 
datagrid删除数据时出现异常我的代码是这么写的:usingSystemusingSystem.CollectionsusingSystem.Compon

datagrid删除数据时出现异常
我的代码是这么写的:
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;
namespace   sbumit.admin
{
///   <summary>
///   degree_m   的摘要说明。
///   </summary>
public   class   degree_m   :   System.Web.UI.Page
{
protected   System.Web.UI.WebControls.Label   Label1;
protected   System.Web.UI.WebControls.Button   btndegree;
protected   System.Web.UI.WebControls.RequiredFieldValidator   RequiredFieldValidator1;
protected   System.Web.UI.WebControls.TextBox   tbxdegree;
protected   System.Web.UI.WebControls.DataGrid   DataGrid1;

private   void   Page_Load(object   sender,   System.EventArgs   e)
{
if(Session[ "usertype "]==null   ||   Session[ "usertype "].GetHashCode()   <   1   ||   Session[ "usertype "].GetHashCode()   >   1)
{
//没有登录或身份不是管理员
Response.Redirect( "login.aspx ");
}
else
{
this.bindtodatagrid();
}
//   在此处放置用户代码以初始化页面
}
public   void   bindtodatagrid()
{
//绑定数据库
SqlConnection   con=db.dbcon();
con.Open();
SqlDataAdapter   sda_d=new   SqlDataAdapter();//数据适配器
sda_d.SelectCommand=new   SqlCommand( "select   *   from   degree ",con);//检索出现有的学位
DataSet   set_d=new   DataSet();
sda_d.Fill(set_d, "degree ");
con.Close();
this.DataGrid1.DataSource=set_d.Tables[ "degree "];
this.DataGrid1.DataBind();
}


#region   Web   窗体设计器生成的代码
override   protected   void   OnInit(EventArgs   e)
{
//
//   CODEGEN:   该调用是   ASP.NET   Web   窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

///   <summary>
///   设计器支持所需的方法   -   不要使用代码编辑器修改
///   此方法的内容。
///   </summary>
private   void   InitializeComponent()
{        
this.DataGrid1.DeleteCommand   +=   new   System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand_1);
this.btndegree.Click   +=   new   System.EventHandler(this.btndegree_Click);
this.Load   +=   new   System.EventHandler(this.Page_Load);

}
#endregion


private   void   btndegree_Click(object   sender,   System.EventArgs   e)
{
SqlConnection   con=db.dbcon();
con.Open();
SqlCommand   addp=new   SqlCommand( "insert   into   degree(degree)   values   ( ' "+this.tbxdegree.Text+ " ')   ",con);
try
{
addp.ExecuteNonQuery();
this.Label1.Text=message.Show( "学位添加成功! ");
}
catch
{
this.Label1.Text=message.Show( "学位添加失败! ");
}
}

private   void   DataGrid1_DeleteCommand_1(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)
{


int   del_d=e.Item.ItemIndex.GetHashCode();
SqlConnection   con=db.dbcon();
con.Open();
SqlCommand   delcom=new   SqlCommand( "delete   from   degree   where   degreeid= "+del_d+ " ",con);
try
{
delcom.ExecuteNonQuery();
this.Label1.Text=message.Show( "数据删除成功 ");
}
catch
{
this.Label1.Text=message.Show( "数据删除失败 ");
}
con.Close();
//   Add   code   to   delete   row   from   data   source.
DataGrid1.DataBind();
}


}
}
这样编写之后编译没有错误,但在执行删除的时候有极个别的时候删除了数据,但还不是我点击删除的相应列。大部分时候显示“删除成功”的对话框却不能删除数据,也有时候显示“删除失败”的对话框。请各位帮忙,这个问题我已经搞了好几天了就是过不去,先谢谢了。急用!

[解决办法]
delete事件以后要重新取得数据源再绑定
con.Close();
DataGrid1.DataSource = //....
DataGrid1.DataBind();
[解决办法]
你删除了数据库里面的自动生成的id了?
而删除了之后就跟行数对不上号了..你要得到那行的degreeid才行
改下这句 int del_d=e.Item.ItemIndex.GetHashCode();
改成得到点击行的degreeid
[解决办法]
Grid删除操作要注意的几点:
1.执行删除事件后要重新绑定
2.在有自动分页时要注意最后一页最后一行的删除引向分页索引
3.删除自定的行时最好有datakey
4.删除失败时注意数据的回滚处理

[解决办法]
删除完了 再绑定数据一次 像一楼的

热点排行