CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

在DataList里删除一条记录后,当前界面的数据没有刷新,而后台数据库已删除,需按“刷新”按纽后数据才刷新出来,这是为什么?

楼主znu991(阿晓)2005-06-03 17:43:03 在 .NET技术 / ASP.NET 提问

不只是“删除”后数据没有刷新,连“更新”、“创建”等情况也一样,急,在线等待!  
   
  界面(admin_Menu.aspx):  
  <%@   Page   language="c#"     Codebehind="admin_Menu.aspx.cs"   AutoEventWireup="false"   Inherits="DT.Admin_Menu"   %>  
  <%@   Import   namespace="DT"   %>  
  <HTML><HEAD></HEAD><body   bgColor="#d6dff7"><form   runat="server">  
  <table   width="90%"   align="center"   cellspacing="0"   cellpadding="0">  
  <tr   valign="middle">  
  <td   colspan="3"   class="tp">  
  <span   class="title">&gt;&gt;菜单管理</span>  
  </td>  
  </tr>  
  <tr>  
  <td   class="tl"></td>  
  <td   height="30"   align="center"   valign="middle">  
  <asp:Label   id="MsgText"   runat="server"   Height="25"   CssClass="Message"></asp:Label>  
  </td>  
  <td   class="tr"></td>  
  </tr>  
  <tr>  
  <td   class="tl"></td>  
  <td>  
  <table   align="center"   cellspacing="0"   cellpadding="0">  
  <TBODY>  
  <tr>  
  <td>  
  <asp:DataList   id="MenuList"   runat="server"   Width="100%"   Height="100%">  
  <HeaderTemplate>  
  <TABLE   id="MenuTable"   cellSpacing="1"   cellPadding="3"   width="100%"   border="0">  
  <TR>  
  <TD   width="10%">ID</TD>  
  <TD>名称</TD>  
  <TD   width="20%">URL</TD>  
  <td   width="30%">描述</td>  
  <td   width="40%">动作</td>  
  </TR>  
  </HeaderTemplate>  
  <FooterTemplate>  
  <tr>  
  <TD>ID</TD>  
  <TD><asp:TextBox   Runat="server"   ID="NewMenuName"></asp:TextBox></TD>  
  <TD><asp:TextBox   Runat="server"   ID="NewMenuURL"></asp:TextBox></TD>  
  <td><asp:TextBox   Runat="server"   ID="NewMenuRemark"></asp:TextBox></td>  
  <td><asp:Button   ID="CreateMenu"   runat="server"   width="60"   Text='创建'></asp:Button></td>  
  </tr>  
  </table>  
  </FooterTemplate>  
  <ItemTemplate>  
  <tr>  
  <TD><asp:TextBox   ID="OldMenuId"   runat="server"   Visible="false"   Text='<%#   DataBinder.Eval(Container.DataItem,   "ID")   %>'></asp:TextBox><%#   DataBinder.Eval(Container.DataItem,   "ID")   %></TD>  
  <TD><asp:TextBox   ID="OldMenuName"   runat="server"   Visible="false"   Text='<%#   DataBinder.Eval(Container.DataItem,   "Name")   %>'></asp:TextBox><%#   DataBinder.Eval(Container.DataItem,   "Name")   %></TD>  
  <TD><%#   DataBinder.Eval(Container.DataItem,   "URL")   %></TD>  
  <TD><%#   DataBinder.Eval(Container.DataItem,   "Remark")   %></TD>  
  <TD><asp:Button   id="EditMenu"   CommandName="Edit"   runat="server"   width="60"   Text='编辑'></asp:Button>  
  <asp:Button   id="DeleteMenu"   CommandName="Delete"   runat="server"   width="60"   Text='删除'></asp:Button></TD>  
  </tr>  
  </ItemTemplate>  
  <EditItemTemplate>  
  <TR>  
  <TD><asp:TextBox   ID="MenuID"   Runat="server"   Visible="False"   Text='<%#   DataBinder.Eval(Container.DataItem,   "ID")   %>'></asp:TextBox><%#   DataBinder.Eval(Container.DataItem,   "ID")   %></TD>  
  <TD><asp:TextBox   ID="MenuName"   Runat="server"   Text='<%#   DataBinder.Eval(Container.DataItem,   "Name")   %>'></asp:TextBox></TD>  
  <TD><asp:TextBox   ID="MenuURL"   Runat="server"   Text='<%#   DataBinder.Eval(Container.DataItem,   "URL")   %>'></asp:TextBox></TD>  
  <TD><asp:TextBox   ID="MenuRemark"   Runat="server"   Text='<%#   DataBinder.Eval(Container.DataItem,   "Remark")   %>'></asp:TextBox></TD>  
  <TD><asp:Button   id="UpdateMenu"   runat="server"   CommandName="Update"   width="60"   Text='更新'></asp:Button>  
  <asp:Button   id="CancelMenu"   runat="server"   CommandName="Cancel"   width="60"   Text='取消'></asp:Button></TD>  
  </TR>  
  </EditItemTemplate>  
  </asp:DataList>  
  </td>  
  </tr>  
  </table>  
  </TD>  
  <td   class="tr"></td>  
  </TR>  
  <tr>  
  <td   colspan="3"   class="tm"></td>  
  </tr>  
  </TBODY></TABLE></form></body></HTML> 问题点数:50、回复次数:22Top

1 楼znu991(阿晓)回复于 2005-06-03 17:43:23 得分 0

代码(admin_Menu.aspx):  
  using   System;  
  using   System.Collections;  
  using   System.ComponentModel;  
  using   System.Data;  
  using   System.Data.OleDb;  
  using   System.Drawing;  
  using   System.Web;  
  using   System.Web.SessionState;  
  using   System.Web.UI;  
  using   System.Web.UI.WebControls;  
  using   System.Web.UI.HtmlControls;  
   
  namespace   DT  
  {  
  public   class   Admin_Menu   :   System.Web.UI.Page  
  {  
  protected   static   string   ConnTemp   =   "Provider=Microsoft.Jet.OleDb.4.0;Data   Source="   +   HttpContext.Current.Server.MapPath("Data")   +   "\\data.mdb";  
  protected   OleDbConnection   OleDbConnectionTemp;  
  protected   System.Data.OleDb.OleDbCommand   OleDbCommandTemp;  
  protected   System.Data.OleDb.OleDbDataAdapter   OleDbDataAdapterTemp;  
  protected   DataSet   DataSetTemp;  
  protected   System.Web.UI.WebControls.DataList   MenuList;  
  protected   System.Data.DataSet   DataSet1;  
  protected   System.Web.UI.WebControls.Label   MsgText;  
  protected   string   sql   =   null;  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  //   在此处放置用户代码以初始化页面  
  if   (!Page.IsPostBack)  
  {  
  BindData();  
  }  
  }  
  void   BindData()  
  {  
  OleDbConnectionTemp   =   new   OleDbConnection(ConnTemp);  
  sql   =   "SELECT   ID,Name,URL,Remark   FROM   DictData   where   Type=0";  
  OleDbDataAdapterTemp   =   new   OleDbDataAdapter(sql,OleDbConnectionTemp);  
  DataSetTemp   =   new   DataSet();  
  OleDbDataAdapterTemp.Fill(DataSetTemp);  
  MenuList.DataSource   =   DataSetTemp.Tables[0].DefaultView;  
  MenuList.DataBind();  
  OleDbConnectionTemp.Close();  
  }  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  InitializeComponent();  
  base.OnInit(e);  
  }  
  private   void   InitializeComponent()  
  {          
  this.Load   +=   new   System.EventHandler(this.Page_Load);  
  this.MenuList.EditCommand   +=   new   DataListCommandEventHandler(MenuList_EditCommand);  
  this.MenuList.DeleteCommand   +=   new   DataListCommandEventHandler(MenuList_DeleteCommand);  
  this.MenuList.UpdateCommand   +=   new   DataListCommandEventHandler(MenuList_UpdateCommand);  
  this.MenuList.CancelCommand   +=   new   DataListCommandEventHandler(MenuList_CancelCommand);  
  this.MenuList.ItemCommand +=new   DataListCommandEventHandler(MenuList_ItemCommand);  
  this.MenuList.ItemCreated   +=   new   DataListItemEventHandler(MenuList_ItemCreated);  
  }  
  private   void   MenuList_EditCommand(object   sender,   DataListCommandEventArgs   e)  
  {  
  this.MenuList.EditItemIndex   =   e.Item.ItemIndex;  
  BindData();  
  }  
  private   void   MenuList_DeleteCommand(object   sender,   DataListCommandEventArgs   e)  
  {  
  TextBox   OldMenuID   =   (TextBox)e.Item.FindControl("OldMenuID");  
  TextBox   OldMenuName   =   (TextBox)e.Item.FindControl("OldMenuName");  
  sql   =   "DELETE   FROM   DICTDATA   WHERE   [ID]="+OldMenuID.Text.Trim();  
  try  
  {  
  Pub.ExeSql(sql);  
  }  
  catch   (Exception   ex)  
  {  
  this.MsgText.Text   =   "菜单:"+OldMenuName.Text.Trim()+"   不删除成功,请重试!";  
  }  
  finally  
  {  
  this.MsgText.Text   =   "菜单:"   +   OldMenuName.Text.Trim()   +   "   删除成功!";  
  this.MenuList.EditItemIndex   =   -1;  
  BindData();  
  }  
  }  
  private   void   MenuList_UpdateCommand(object   sender,   DataListCommandEventArgs   e)  
  {  
  TextBox   MenuID   =   (TextBox)e.Item.FindControl("MenuID");  
  TextBox   MenuName   =   (TextBox)e.Item.FindControl("MenuName");  
  TextBox   MenuURL   =   (TextBox)e.Item.FindControl("MenuURL");  
  TextBox   MenuRemark   =   (TextBox)e.Item.FindControl("MenuRemark");  
  sql   =   "UPDATE   DICTDATA   SET   [NAME]='"+Pub.FormatSQL(MenuName.Text)+"',[URL]='"+Pub.FormatSQL(MenuURL.Text)+"',[Remark]='"+Pub.FormatSQL(MenuRemark.Text)+"'   where   [ID]="+MenuID.Text.Trim();  
  try  
  {  
  Pub.ExeSql(sql);  
  }  
  catch   (Exception   ex)  
  {  
  this.MsgText.Text   =   "菜单:"+MenuName.Text.Trim()+"   更新失败,请重试!";  
  }  
  finally  
  {  
  this.MsgText.Text   =   "菜单:"   +   MenuName.Text.Trim()   +   "   更新成功!";  
  this.MenuList.EditItemIndex   =   -1;  
  BindData();  
  }  
  }  
  private   void   MenuList_CancelCommand(object   sender,   DataListCommandEventArgs   e)  
  {  
  this.MenuList.EditItemIndex   =   -1;  
  BindData();  
  }  
  private   void   MenuList_ItemCommand(object   sender,   DataListCommandEventArgs   e)  
  {  
  if   (e.Item.ItemType   ==   ListItemType.Footer   )  
  {  
  TextBox   NewMenuName   =   (TextBox)e.Item.FindControl("NewMenuName");  
  TextBox   NewMenuURL   =   (TextBox)e.Item.FindControl("NewMenuURL");  
  TextBox   NewMenuRemark   =   (TextBox)e.Item.FindControl("NewMenuRemark");  
  sql   =   "Insert   into   DICTDATA   ([Name],[URL],[Remark])   values   ('"+Pub.FormatSQL(NewMenuName.Text.Trim())+"','"+Pub.FormatSQL(NewMenuURL.Text.Trim())+"','"+Pub.FormatSQL(NewMenuRemark.Text.Trim())+"')";  
  try  
  {  
  Pub.ExeSql(sql);  
  }  
  catch   (Exception   ex)  
  {  
  this.MsgText.Text   =   "菜单:"+NewMenuName.Text.Trim()+"   创建失败,请重试!";  
  }  
  finally  
  {  
  this.MsgText.Text   =   "菜单:"   +   NewMenuName.Text.Trim()   +   "   创建成功!";  
  this.MenuList.EditItemIndex   =   -1;  
  BindData();  
  }  
  }  
  }  
  private   void   MenuList_ItemCreated(Object   sender,   DataListItemEventArgs   e)  
  {  
  if   (e.Item.ItemType   ==   ListItemType.Item)  
  {  
  Button   DeleteMenu   =   (Button)e.Item.FindControl("DeleteMenu");  
  DeleteMenu.Attributes.Add("onclick","return   confirm('确认要删除吗?')");  
  }  
  }  
  }  
  }Top

2 楼wssmax(请叫我三角猫)回复于 2005-06-03 17:59:49 得分 5

//   在此处放置用户代码以初始化页面  
  if   (!Page.IsPostBack)  
  {  
  BindData();  
  }  
   
  就是这里那Top

3 楼yipiaoqingshui(一瓢清水)回复于 2005-06-03 18:00:24 得分 0

当刷新的时候才会重新去读服务器上的数据.所以不刷新的时候自然显示的是旧的.  
  不可能一直都连着数据库.哪网站肯定得完蛋.  
  你可以设置多少秒自动刷新一下...这个是可以用JS实现的  
  Top

4 楼wssmax(请叫我三角猫)回复于 2005-06-03 18:00:26 得分 0

去掉Top

5 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-03 18:03:45 得分 0

把这一句  
  this.MenuList.EditItemIndex   =   -1;  
  BindData();  
  放到你的try块里面.Top

6 楼yipiaoqingshui(一瓢清水)回复于 2005-06-03 18:04:38 得分 0

try  
  {  
  Pub.ExeSql(sql);  
                                                                          BindData();//重新绑定试试看.创建和修改  
   
  }  
  catch   (Exception   ex)  
  {  
  this.MsgText.Text   =   "菜单:"+MenuName.Text.Trim()+"   更新失败,请重试!";  
  }  
  Top

7 楼aaron_lly(永远,永远,等她回来!)回复于 2005-06-03 18:06:22 得分 0

在删除事件里,,,,当执行完删除命令后,,,再将datalist重新读取一次,,,Top

8 楼yipiaoqingshui(一瓢清水)回复于 2005-06-03 18:06:33 得分 5

还有个方法  
  try  
  {  
  Pub.ExeSql(sql);  
                                                                        Response.Redirect("admin_menu.aspx");//试试看.创建和修改  
   
  }  
  catch   (Exception   ex)  
  {  
  this.MsgText.Text   =   "菜单:"+MenuName.Text.Trim()+"   更新失败,请重试!";  
  }  
   
  Top

9 楼yuezhong(妈咪,有小姐吗?便宜点的)回复于 2005-06-03 18:16:02 得分 0

你操作完控制它再读一次数据  
  Top

10 楼luckyprg(lucky)回复于 2005-06-03 18:25:43 得分 0

删除后没有重新绑定数据。Top

11 楼znu991(阿晓)回复于 2005-06-03 18:40:26 得分 0

To   hchxxzx:  
  把  
  this.MenuList.EditItemIndex   =   -1;  
  BindData();  
  放在try语句中,测试过不行!  
   
  To   yipiaoqingshui:  
  Response.Redirect("admin_menu.aspx");  
  测试过也不行!  
   
  我想是不是DataList的设置哪能里出问题了,而不是操作后重新绑定数据(重新绑定数据的语句我都写了,看上面的源程序)。Top

12 楼OSCAR_NJU(死刑犯)回复于 2005-06-03 19:57:27 得分 0

可能是2楼说的问题Top

13 楼cgipro(迷途)回复于 2005-06-03 21:08:24 得分 0

保证程序运行  
    .Databind()Top

14 楼wzd24(牧野)(衣带渐宽终不悔,为伊消得人憔悴)回复于 2005-06-03 21:17:41 得分 40

没有重新设置数据源,因为DATASET和DATATABLE是脱离数据库存在的,不会和数据库同步更新。  
  所以必须重新填充DATASET或DATATABLE,然后重新绑定!!!  
  Top

15 楼Bruce_H21(麦克屎高飞)回复于 2005-06-03 21:38:30 得分 0

更新和删除数据以后肯定要重新绑定一次数据,要么数据表是不会变化的。Top

16 楼leojay1(绯村剑心)回复于 2005-06-03 22:23:44 得分 0

markTop

17 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-06-03 22:32:54 得分 0

上面说的很详细了。这类问题,不用看全文,只要看事件处理之后是重建了界面,如果没有,就肯定不能显示新界面。Top

18 楼apcsherry(无敌神勇小超人)回复于 2005-06-03 23:12:48 得分 0

做好修改,删除。。等操作后再绑定一次数据读取操作!Top

19 楼YG200233(I love code,I hate code too)回复于 2005-06-03 23:31:03 得分 0

都有答案了,  
  2楼的方法比较不错。我就是用那个  
   
  //每天学习多一点Top

20 楼znu991(阿晓)回复于 2005-06-03 23:48:38 得分 0

To   wzd24:  
  private   void   MenuList_DeleteCommand(object   sender,   DataListCommandEventArgs   e)  
  {  
  TextBox   OldMenuID   =   (TextBox)e.Item.FindControl("OldMenuID");  
  TextBox   OldMenuName   =   (TextBox)e.Item.FindControl("OldMenuName");  
  sql   =   "DELETE   FROM   DICTDATA   WHERE   [ID]="+OldMenuID.Text.Trim();  
  Pub.ExeSql(sql);  
  MenuList.EditItemIndex   =   -1;  
  OleDbConnection   tempConn   =   new   OleDbConnection(ConnTemp);  
  string   tempSQL   =   "SELECT   ID,Name,URL,Remark   FROM   DictData   where   Type=0";  
  OleDbDataAdapter   tempOleDbDataAdapter   =   new   OleDbDataAdapter(tempSQL,tempConn);  
  DataSet   tempDataSet   =   new   DataSet();  
  tempOleDbDataAdapter.Fill(tempDataSet,"DictData");  
  MenuList.DataSource   =   tempDataSet.Tables["DictData"].DefaultView;  
  MenuList.DataBind();  
  this.MsgText.Text   =   "菜单:"   +   OldMenuName.Text.Trim()   +   "   删除成功!";  
  }  
   
  删除后的数据绑定时用到ADO.NET的所有类我都重新定义过,问题还是一样!是不是整个ASPX页面设置有问题!Top

21 楼eyych(2006)回复于 2005-06-04 01:38:29 得分 0

 
  重新填充DATASET或DATATABLE,然后重新绑定!!!Top

22 楼znu991(阿晓)回复于 2005-06-04 11:47:00 得分 0

问题已解决了,谢谢“   wzd24(牧野)   ”的提示,让我重新看了《ADO.NET技术内幕》这本书,知道DATASET或DATATABLE是脱离数据库存在的,不会和数据库同步更新!如果需要后台数据库与DataList的DataSource(即DATASET或DATASET)同步更新,需两边都更新!DataList的DataSource是一直通过ViewStatus保留内存,需通过DataRowView.BeginEdit()或editRow.Delete()方法更新,而后台数据库通过OleDbDataAdapter.Update()方法更新。  
  OleDbConnection→OleDbDataAdapter→DataTable或DataSet→DataView→DataRowView  
   
  private   void   MenuList_UpdateCommand(object   sender,   DataListCommandEventArgs   e)  
  {  
          TextBox   MenuID   =   (TextBox)e.Item.FindControl("MenuID");  
          TextBox   MenuName   =   (TextBox)e.Item.FindControl("MenuName");  
          TextBox   MenuURL   =   (TextBox)e.Item.FindControl("MenuURL");  
          TextBox   MenuRemark   =   (TextBox)e.Item.FindControl("MenuRemark");  
          sql   =   "UPDATE   DICTDATA   SET   [NAME]='"+Pub.FormatSQL(MenuName.Text)+"',[URL]='"+Pub.FormatSQL(MenuURL.Text)+"',[Remark]='"+Pub.FormatSQL(MenuRemark.Text)+"'   where   [ID]="+MenuID.Text.Trim();  
          try  
          {  
                    //更新DataTable  
  DataRowView[]   findRow   =   DataView1.FindRows(MenuID.Text.Trim());  
  if   (findRow.Length   ==   1)  
  {  
          DataRowView   editRow   =   findRow[0];  
          editRow.BeginEdit();  
          editRow["Name"]   =   MenuName.Text.Trim();  
          editRow["URL"]   =   MenuURL.Text.Trim();  
          editRow["Remark"]   =   MenuRemark.Text.Trim();  
          editRow.EndEdit();  
                    }  
                    //更新后台数据库  
  OleDbCommand   updateCommand   =   new   OleDbCommand(sql,Pub.OleDbConnection1);  
  DataAdapter1.UpdateCommand   =   updateCommand;  
  DataAdapter1.Update(DataTable1);  
                    //重新绑定DataList的DataSource  
  MenuList.EditItemIndex   =   -1;  
  BindList();  
          }  
          catch   (Exception   ex)  
          {  
  this.MsgText.Text   =   "菜单:"+MenuName.Text.Trim()+"   更新失败,请重试!";  
          }  
          finally  
          {  
                  this.MsgText.Text   =   "菜单:"   +   MenuName.Text.Trim()   +   "   更新成功!";  
          }  
  }  
   
  注明:通过Response.Redirect("admin_menu.aspx")等类似方法会增加IIS服务器的负荷,不可取,而且我在本机也没测试成功过!Top

相关问题

  • 简单问题:提交按纽后,没有反应,数据提交不了,也不抱错!(文章系统后台添加文章)
  • 如何在后台代码中对datalist中button编程?
  • 按纽问题
  • DataList中的LABEL控件如何在后台引用和在CS中付值啊?
  • 怎么在后台代码里面找到 DataList 中的HeaderTemplate里的LinkButton?
  • 这个后台没有代码,所以也跳转不了,我该怎么办?用的是DataList
  • 如何变灰按纽?
  • 关于退出按纽
  • 按纽的焦点问题
  • 按纽菜单请教

关键词

  • ado.net
  • 数据
  • 刷新
  • 删除

得分解答快速导航

  • 帖主:znu991
  • wssmax
  • yipiaoqingshui
  • wzd24

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo