一个以DataGrid显示邮票品种的ASP.net页面,在DataGrid中以一个HyperlinkColumn来用一个链接删除某个品种(将状态置为无效):
<%@ Page Language=C# Trace=false %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<Script language="C#" runat="server">
public void Page_Load(Object sender, EventArgs e){
if (!Page.IsPostBack){
BindGrid();
}
} public void DBItemEdit(Object sender,DataGridCommandEventArgs e){
DBGrid.EditItemIndex=e.Item.ItemIndex;
BindGrid();
}public void DBItemCancel(object sender,DataGridCommandEventArgs e){
DBGrid.EditItemIndex=-1;
BindGrid();
}public void DBItemUpdate(object sender,DataGridCommandEventArgs e){
string StrStampNO =e.Item.Cells[0].Text;
string CnnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("Stamp.MDB"); 
OleDbConnection cnn = new OleDbConnection(CnnString); 
StringBuilder Sb=new StringBuilder("Select * from Stamp Where State=1 and StampNO=");
Sb.Append(StrStampNO);

DataSet Ds=new DataSet();
OleDbDataAdapter Adapter=new OleDbDataAdapter(Sb.ToString(),cnn);
OleDbCommandBuilder Cb=new OleDbCommandBuilder(Adapter);
Adapter.Fill(Ds,"Stamp");
DataRow Dr=Ds.Tables["Stamp"].Rows[0];

TextBox txtModStampName=(TextBox)e.Item.Cells[1].Controls[0];
TextBox txtModAmount=(TextBox)e.Item.Cells[2].Controls[0];
TextBox txtModStampClassID=(TextBox)e.Item.Cells[3].Controls[0];

Dr["StampName"]=txtModStampName.Text;
Dr["Amount"]=txtModAmount.Text;
Dr["StampClassID"]=txtModStampClassID.Text;
Adapter.Update(Ds,"Stamp");

DBGrid.EditItemIndex=-1;
BindGrid();
}public void BindGrid(){
string CnnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("Stamp.MDB"); 
OleDbConnection cnn = new OleDbConnection(CnnString); 
StringBuilder Sb=new StringBuilder("select * from Stamp Where State=1 order by StampClassID");
OleDbDataAdapter Da=new OleDbDataAdapter(Sb.ToString(),cnn);

DataSet Ds=new DataSet();
cnn.Open();
Da.Fill(Ds,"ResTable");
DBGrid.DataSource=Ds.Tables["ResTable"].DefaultView;
DBGrid.DataBind();
cnn.Close();

lblMsg.Text="";
}
public void BtnAddNew_Click(object sender, EventArgs e){
string CnnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("Stamp.MDB"); 
OleDbConnection cnn = new OleDbConnection(CnnString); 
string StrSql="Select * from Stamp";
DataSet Ds=new DataSet();
OleDbDataAdapter Adapter=new OleDbDataAdapter(StrSql,cnn);
OleDbCommandBuilder Cb=new OleDbCommandBuilder(Adapter);
Adapter.Fill(Ds,"Stamp");
DataRow Dr;
Dr=Ds.Tables["Stamp"].NewRow();
Dr["StampName"]=txtName.Text;
Dr["State"]=1;
if (txtAmount.Text!="")
Dr["Amount"]=txtAmount.Text;
Dr["StampClassID"]=txtStampClassID.Text;
Ds.Tables["Stamp"].Rows.Add(Dr);
Adapter.Update(Ds,"Stamp");
BindGrid();
txtName.Text="";
txtAmount.Text="";
}</Script>
<html>
<head>
</head>
<body>
<form runat="server">
<asp:Label Runat="server" ForeColor=#FF0000 Text="" ID="lblMsg" />
<li>新增邮品:
<asp:requiredfieldvalidator runat="server" ForeColor=red ErrorMessage="名称必填" ID="requiredfieldvalidator1" ControlToValidate="txtName" />
<asp:RangeValidator ID="Vad2" Runat="server" ControlToValidate="txtAmount" Type="Double" MinimumValue="0" MaximumValue="99999999" ErrorMessage="发行量请输入以万为单位的纯数字!" /><br>
<asp:Label ID="lblName" runat="Server" Text="名称:"  font-size="13px" />
<asp:TextBox ID="txtName" runat="server" />
<asp:Label ID="lblAmount" runat="server" Text="发行量(万为单位的数字):"  font-size="13px" />
<asp:TextBox ID="txtAmount" runat="server"  Columns=8 />
<asp:Label ID="lblStampClassID" runat="server" Text="所属分类:"  font-size="13px" />
<asp:TextBox ID="txtStampClassID" runat="server" />
<asp:Button ID="BtnAddNew" runat="server" Text="保存新增" OnClick="BtnAddNew_Click" />
</li>
<br>
<li>修改邮品信息:
<asp:DataGrid ID="DBGrid" runat="server" AllowPaging="False" PageStyle-HorizontalAlign="Right" HeaderStyle-BackColor="#eeeeff" BackColor="#Feffff"
Font-Size="10pt" AutoGenerateColumns="False" cellpadding="3" cellspacing="1"  OnEditCommand="DBItemEdit" OnCancelCommand="DBItemCancel"  OnUpdateCommand="DBItemUpdate" 
PageSize=50 >
<columns>
<asp:BoundColumn DataField="StampNo" Visible=False ReadOnly />
<asp:BoundColumn DataField="StampName" HeaderText="  名称  " />
<asp:BoundColumn DataField="Amount" HeaderText=" 发行量 " />
<asp:BoundColumn DataField="StampClassID" HeaderText="所属分类" />
<asp:EditCommandColumn EditText="修改" CancelText="取消" UpdateText="保存" HeaderText="编辑" />
<asp:HyperLinkColumn HeaderText="    " FooterText="" DataNavigateUrlField="StampNo" DataNavigateUrlFormatString="AdminDelStamp.aspx?StampNo={0}" Text="删除" />
</Columns>
</asp:DataGrid>
</li>
</form>
</body>
</html>
当用户点“删除”按钮后执行AdminDelStamp.aspx:
<%@ Page Language=C# Trace=False %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%
string CnnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("Stamp.MDB"); 
OleDbConnection cnn = new OleDbConnection(CnnString); 
StringBuilder Sb=new StringBuilder("Update Stamp set State=0 where StampNO=");
Sb.Append(Request.QueryString["StampNo"]);
OleDbCommand Cmd=new OleDbCommand(Sb.ToString(),cnn);
cnn.Open();
Cmd.ExecuteNonQuery();
Response.Redirect("AdminStamp.aspx?x=5");
%>现在的问题是,什么每次点删除后返回原页面后,这行被删除的数据仍在页面的DataGrid中,非要点一下刷新或点下其它编辑按钮或重点一下页面才会刷新?

解决方案 »

  1.   

    如果我点一次“删除”链接(HyperlinkColumn),页面上的数据没有变化,但数据库中的数据的确改了(说明AdminDelStamp.aspx已经执行了),但是奇怪的是页面上绑定的数据却没刷新。
    但如果我再点一次,页面上的数据就刷新了。
      

  2.   

    try ->Response.Redirect("AdminStamp.aspx?x=5&timestamp=" + DateTime.Now.Ticks.ToString());
      

  3.   

    我试过了,那个x=5也是我怀疑是被缓存加上去的,以使Redirect后的URL与前次不同,但不起作用,时间的方式我也试了,怪就怪在点一次链接DataGrid不会刷新,但点第二次就刷新了
      

  4.   

    <asp:HyperLinkColumn HeaderText="    " FooterText="" DataNavigateUrlField="StampNo" DataNavigateUrlFormatString="AdminDelStamp.aspx?StampNo={0}" Text="删除" />
    =================change to
    <a href='javascript:window.open(\'AdminDelStamp.aspx?StampNo=<%# Eval("_id")%>\')'>删除</a>
    AdminDelStamp.aspx中加上这句:opener.document.reload();