首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2012-01-21 
极度困惑,下面的程序怎么会是这样的结果?!一个以DataGrid显示邮票品种的ASP.net页面,在DataGrid中以一个Hy

极度困惑,下面的程序怎么会是这样的结果?!
一个以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();

热点排行