大家好,现在遇到一个问题,我是用VS2003+ACCESS的
用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.OleDb;namespace admin
{
/// <summary>
/// manage_news 的摘要说明。
/// </summary>
public class manage_news : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
this.databind();
Session["reload"]=null;
}
} private void databind()
{
OleDbConnection conn=db.conn();
conn.Open();
OleDbDataAdapter sda=new OleDbDataAdapter();
sda.SelectCommand=new OleDbCommand("select * from news order by ArticleID desc",conn); DataSet ds = new DataSet();
sda.Fill(ds,"news"); this.DataGrid1.DataKeyField="ArticleID"; DataView dv = ds.Tables[0].DefaultView;
ViewState["Row"] = dv.Count;
this.DataGrid1.DataSource = dv;
this.DataGrid1.DataBind();
ds.Clear();
conn.Close();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{ if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","old=this.style.backgroundColor;this.style.backgroundColor='#f1f4f2'");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=old");
((LinkButton)(e.Item.Cells[3].Controls[0])).Attributes.Add("onclick","return confirm('你确认删除吗?');");
if(e.Item.Cells[1].Text=="2")
{
e.Item.Cells[1].Text="站内新闻";
}
else
{
e.Item.Cells[1].Text="行业新闻";
}
}
} private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
this.databind();
} private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
ListItemType elemType = e.Item.ItemType; if (elemType == ListItemType.Pager)
{
TableCell pager = (TableCell)e.Item.Controls[0];
Label la = new Label();
la.Text = "总记录数:<b>"+ViewState["Row"].ToString()+" </b>";
la.Text += "总页数:<b>"+this.DataGrid1.PageCount+" </b>";
la.Text += "当前页:<font color=red><b>"+(this.DataGrid1.CurrentPageIndex+1).ToString()+" </b></font> ";
pager.Controls.AddAt(0,la); } } private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int idd=Convert.ToInt32(this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
OleDbConnection condel = db.conn();
condel.Open();
OleDbCommand cmddel=new OleDbCommand("delete from news where ArticleID="+idd,condel);
cmddel.ExecuteNonQuery();
this.databind();
}
}
}
用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.OleDb;namespace admin
{
/// <summary>
/// manage_news 的摘要说明。
/// </summary>
public class manage_news : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
this.databind();
Session["reload"]=null;
}
} private void databind()
{
OleDbConnection conn=db.conn();
conn.Open();
OleDbDataAdapter sda=new OleDbDataAdapter();
sda.SelectCommand=new OleDbCommand("select * from news order by ArticleID desc",conn); DataSet ds = new DataSet();
sda.Fill(ds,"news"); this.DataGrid1.DataKeyField="ArticleID"; DataView dv = ds.Tables[0].DefaultView;
ViewState["Row"] = dv.Count;
this.DataGrid1.DataSource = dv;
this.DataGrid1.DataBind();
ds.Clear();
conn.Close();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{ if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","old=this.style.backgroundColor;this.style.backgroundColor='#f1f4f2'");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=old");
((LinkButton)(e.Item.Cells[3].Controls[0])).Attributes.Add("onclick","return confirm('你确认删除吗?');");
if(e.Item.Cells[1].Text=="2")
{
e.Item.Cells[1].Text="站内新闻";
}
else
{
e.Item.Cells[1].Text="行业新闻";
}
}
} private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
this.databind();
} private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
ListItemType elemType = e.Item.ItemType; if (elemType == ListItemType.Pager)
{
TableCell pager = (TableCell)e.Item.Controls[0];
Label la = new Label();
la.Text = "总记录数:<b>"+ViewState["Row"].ToString()+" </b>";
la.Text += "总页数:<b>"+this.DataGrid1.PageCount+" </b>";
la.Text += "当前页:<font color=red><b>"+(this.DataGrid1.CurrentPageIndex+1).ToString()+" </b></font> ";
pager.Controls.AddAt(0,la); } } private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int idd=Convert.ToInt32(this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
OleDbConnection condel = db.conn();
condel.Open();
OleDbCommand cmddel=new OleDbCommand("delete from news where ArticleID="+idd,condel);
cmddel.ExecuteNonQuery();
this.databind();
}
}
}
ds.Clear();
conn.Close();
this.DataGrid1.DataBind();
不知道是不是这个
conn.Close();
this.DataGrid1.DataBind();"
这些加与不加都一个样很多方法我都试过了,就是AJAX还没有试了,没有必要吧
在databind() 方法中 DataGrid1.DataSource 可以是ds;
如果要得到Row 的行数也可以用ds获得啊.(ds.Tables["news"].rows.count 好像是,不太记得了.)
你那个Delete事件里的this.DataGrid1.DataBind();中的this去掉试一试.
还有:楼上说的用AJAX才能刷新,这是不对的.没有必要.提一点建议:
可以把
OleDbConnection conn=db.conn();
conn.Open();
OleDbDataAdapter sda=new OleDbDataAdapter();
sda.SelectCommand=new OleDbCommand("select * from news order by ArticleID desc",conn);
等,这些东东提出来,方法接收一个string 类型的字符串,就是SQL语句.
方法返回一个 DataSet ds;当然要是Fill();以后的.
DataGrid1.DataSource = 提出来的这个方法的返回值啦.
这样做多好啊!
在下献丑了哈.
{
//你获取datasource的操作,假设产生dataTable DT,
DataGrid1.DataSource=DT;
DataGrid1.DataBind();
}然后,每一次你进行了数据操作,都在操作最后把这个函数调用下,就OK了我用GridView,不喜欢DataGrid,那个东西操作起来很麻烦,相对来讲封装得不好
{
int idd=Convert.ToInt32(this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
OleDbConnection condel = db.conn();
condel.Open();
OleDbCommand cmddel=new OleDbCommand("delete from news where ArticleID="+idd,condel);
cmddel.ExecuteNonQuery();
this.DataGrid1.CurrentPageIndex=-1;this.databind();
} 要不你加一句我的有颜色的代码试试看,应该不会有问题了。
{
int idd=Convert.ToInt32(this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
OleDbConnection condel = db.conn();
condel.Open();
OleDbCommand cmddel=new OleDbCommand("delete from news where ArticleID="+idd,condel);
cmddel.ExecuteNonQuery();
condel.Close();
this.databind();
} 在此谢谢大家的帮助