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.OleDb;
using System.Configuration;
namespace plastic
{
/// <summary>
/// proclass 的摘要说明。
/// </summary>
public class proclass : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dgd_proclass;
protected System.Web.UI.WebControls.Label Lbl_note;private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack) BindGrid();// 在此处放置用户代码以初始化页面
}
public void BindGrid()
{OleDbConnection conn =new OleDbConnection(DataBaseDB.ConnectionString);
conn.Open();
string mysql="select * from proclass";
OleDbCommand cm=new OleDbCommand(mysql,conn);
OleDbDataAdapter da=new OleDbDataAdapter(mysql,conn);
DataSet ds=new DataSet();
da.Fill(ds);
//if( ds != null && ds.Tables.Count > 0 )
//{
//DataTable dataTable =ds.Tables[0];
//if( dataTable.Rows.Count > 0 )
//{
dgd_proclass.DataSource=ds;
dgd_proclass.DataBind();// do something;
//}
//}
conn.Close();
}
public class DataBaseDB
{
public static String ConnectionString = String.Format(ConfigurationSettings.AppSettings["SqlAccessStr"], HttpContext.Current.Server.MapPath("."));
}
public void DataGrid_Page(Object sender,DataGridPageChangedEventArgs E)
{
dgd_proclass.CurrentPageIndex=E.NewPageIndex;                                                                             
BindGrid();
}
public void DataGrid_Edit(Object sender,DataGridCommandEventArgs E)
{
dgd_proclass.EditItemIndex =(int)E.Item .ItemIndex ;
BindGrid();
}
public void DataGrid_Cancel(Object sender,DataGridCommandEventArgs E)
{
dgd_proclass.EditItemIndex =-1;
BindGrid();
}
public void DataGrid_Update(Object sender,DataGridCommandEventArgs E)
{
OleDbConnection conn =new OleDbConnection(DataBaseDB.ConnectionString);
conn.Open();
string mysql="update proclass set proclassname=@proclassname where proclassid=@proclassid";
OleDbCommand cm=new OleDbCommand(mysql,conn);cm.Parameters.Add("@proclassid",OleDbType.Integer);
cm.Parameters.Add(new OleDbParameter("@proclassname",OleDbType.VarChar));cm.Parameters ["@proclassid"].Value =Convert.ToInt32(dgd_proclass.DataKeys[(int)E.Item.ItemIndex]);
string proclassname1=((TextBox)E.Item.Cells[1].Controls[0]).Text;
cm.Parameters ["@proclassname"].Value =proclassname1;//cm.Connection.Open();
try
{cm.ExecuteNonQuery ();Lbl_note.Text="编辑成功!";
dgd_proclass.EditItemIndex =-1;
BindGrid();
}
catch(OleDbException)
{
Lbl_note.Text="编辑失败,请检查输入!";
Lbl_note.Style["color"]="red";
}
//cm.Connection.Close();
BindGrid();}
public void DataGrid_Delete(Object sender,DataGridCommandEventArgs E)
{
OleDbConnection conn =new OleDbConnection(DataBaseDB.ConnectionString);
conn.Open();
string mysql="delete from proclass where proclassid=@proclassid";
OleDbCommand cm=new OleDbCommand(mysql,conn);
cm.Parameters.Add("@proclassid",OleDbType.BigInt);
cm.Parameters ["@proclassid"].Value =dgd_proclass.DataKeys[(int)E.Item.ItemIndex];
cm.ExecuteNonQuery ();
dgd_proclass.EditItemIndex =-1;
BindGrid();
}#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    this.Load += new System.EventHandler(this.Page_Load);}
#endregion
}
}
点更新,没反应

解决方案 »

  1.   

    你的事件绑定全都丢了,需要重新绑定在InitializeConponent()中加上
    this.DataGrid.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid_Update);删除、取消都类似,都要加上类似这样的一句话
      

  2.   

    在html代码中,<asp:datagrid  ...>里面应该有对应的更新属性,用来响应DataGrid_Update事件。
      

  3.   

    点击DATAGRID控件,按F4,出现工具箱,上方有一个小闪电标志,点击,显示出事件名,在事件名右侧输入框里面,双击,即可自动生成事件,并转到后台代码.
    你已经有事件过程了,那就点击输入框的下拉框,选择每个事件所对应的事件过程即可.
      

  4.   

    修改你的程序:
    public void DataGrid_Update(Object sender,DataGridCommandEventArgs E)
    {
    OleDbConnection conn =new OleDbConnection(DataBaseDB.ConnectionString);
    conn.Open();
    string mysql="update proclass set proclassname=? where proclassid=?";
    OleDbCommand cm=new OleDbCommand(mysql,conn); cm.Parameters.Add("@proclassname",OleDbType.VarChar);
    cm.Parameters.Add("@proclassid",OleDbType.Integer); cm.Parameters[1].Value = Convert.ToInt32(dgd_proclass.DataKeys[(int)E.Item.ItemIndex]);
    string proclassname1=((TextBox)E.Item.Cells[1].Controls[0]).Text;
    cm.Parameters[0].Value = proclassname1; //cm.Connection.Open();
    try
    { cm.ExecuteNonQuery ();
    cm.Connection.Close();
    Lbl_note.Text="编辑成功!";
    dgd_proclass.EditItemIndex =-1;
    BindGrid();
    }
    catch(OleDbException)
    {
    Lbl_note.Text = "编辑失败,请检查输入!";
    Lbl_note.Style["color"]="red";
    }
    //BindGrid();
    }你的程序还真有不少问题,OleDb不支持参数名,其中的参数应该用?做占位符,而且添加参数的顺序必须与语句中?的出现一致
    还有,在ExecuteNonQuery以后没有及时关闭连接,就调用了BindGrid,试图访问这个文件,其实这个文件还被ExecuteNonQuery的连接占用着呢我给你改了一下代码,应该能通过了,不过还是不太完善,比如出了异常不能及时关掉连接等,还需要你再进一步修改
      

  5.   

    再检查一下.mdb文件的NTFS的权限,给启动asp.net的用户写文件的权限
      

  6.   

    to: fancyf(Fancyray) 
    谢谢你,同时也谢谢楼上几位大哥
    终于解决了不知道oledb还有这么多问题啊
    自己在学着做个小东西,所以用了access,没想到这么复杂另:哪位大哥有oledb与sql的对比资料?
    好辛苦哦
      

  7.   

    不客气,对比资料我不知道哪里有,其实oledb和sql还是相同之处多,针对Access来说,存储过程的功能弱一些,不支持子查询,一时也想不起其它的不同之处来了