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;
using System.Data.OleDb;namespace 试验3
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.Label LBLNAME;
protected System.Web.UI.WebControls.Label iD;
protected System.Web.UI.WebControls.Label XING;
protected System.Web.UI.WebControls.Label MING;
SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings.Get("dsn"));

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
SqlDataReader dr=null;
SqlCommand cm=new SqlCommand();
cm.Connection=conn;
conn.Open();

if(!IsPostBack)
{   cm.CommandText="Select FIRSTNAME,LASTNAME,TeacherID from Teachers";
cm.Connection=conn;
dr=cm.ExecuteReader();
DataGrid1.DataSource=dr;
DataGrid1.DataBind();
dr.Close();

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

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
this.DataGrid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_CancelCommand);
this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
this.DataGrid1.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_UpdateCommand);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
//获取被操作的那一行
TableRow tr=e.Item;
//获取每个单元的数据

iD.Text=tr.Cells[0].Text;
XING.Text=tr.Cells[1].Text;
MING.Text=tr.Cells[2].Text;
LBLNAME.Text=XING.Text+MING.Text;

}

         /// <summary>
         /// 处理EDIT命令
         /// </summary>
         /// <param name="source"></param>
         /// <param name="e"></param>
private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
   DataGrid1.EditItemIndex=(int)e.Item.ItemIndex;
BindGrid();
}

        //处理CANCEL命令
private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
      DataGrid1.EditItemIndex=-1;
BindGrid();
}
       
private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    //更新数据库中的信息
string id=e.Item.Cells[0].Text;
string  xing=((TextBox)e.Item.Cells[1].Controls[0]).Text;
string ming=((TextBox)e.Item.Cells[2].Controls[0]).Text;
//更新数据库中的数据
string strupdate=" UPDATE Teachers SET FIRSTNAME='+xing+',LASTNAME='+ming+' WHERE TeacherID='id'";
    SqlCommand cm=new SqlCommand();
            cm.CommandText=strupdate;
cm.Connection=conn;
//conn.Open(); cm.ExecuteNonQuery();
//DataGrid1.EditItemIndex=-1;
//BindGrid();        }
public void BindGrid()
{  
DataGrid1.DataSource=CreateTable();
DataGrid1.DataBind();

}
ICollection CreateTable()
{   string com="Select FIRSTNAME,LASTNAME,TeacherID from Teachers";
DataSet ds=new DataSet();
SqlDataAdapter myadapter=new SqlDataAdapter(com,conn);
myadapter.Fill(ds,"dataGrid1");
return ds.Tables["dataGrid1"].DefaultView; }


}
}

解决方案 »

  1.   

    dr=cm.ExecuteReader();
    DataGrid1.DataSource=dr;
    DataGrid1.DataBind();
    dr.Close();你把dr关了 怎么会有数据datagrid最好绑定dataset 他是断开连接的
      

  2.   

    在更新事件中,变量的值已经发生了变化,在执行完这个事件以后。datagrid中的数据也确实为改变后的值。但是数据库中的数据并没有发生变化。而且当点击其他编辑键的时候, 以前改变了的数据又恢复到以前的值
      

  3.   

    哦。但那是页面加载中的啊。难道会对后面的有影响吗?在PAGELOAD中的东西能够影响到哪些部分?