读书人

极度困惑下面的程序如何会是这样的结

发布时间: 2012-01-21 21:31:43 作者: rapoo

极度困惑,下面的程序怎么会是这样的结果?!
一个以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中,非要点一下刷新或点下其它编辑按钮或重点一下页面才会刷新?

[解决办法]
数据被缓存了?
[解决办法]
<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();

读书人网 >asp.net

热点推荐