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.删除失败时注意数据的回滚处理
[解决办法]
删除完了 再绑定数据一次 像一楼的