不只是“删除”后数据没有刷新,连“更新”、“创建”等情况也一样,急,在线等待!界面(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="NewMenuRe"></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, "Re") %></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="MenuRe" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Re") %>'></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>

解决方案 »

  1.   

    代码(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,Re 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 MenuRe = (TextBox)e.Item.FindControl("MenuRe");
    sql = "UPDATE DICTDATA SET [NAME]='"+Pub.FormatSQL(MenuName.Text)+"',[URL]='"+Pub.FormatSQL(MenuURL.Text)+"',[Re]='"+Pub.FormatSQL(MenuRe.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 NewMenuRe = (TextBox)e.Item.FindControl("NewMenuRe");
    sql = "Insert into DICTDATA ([Name],[URL],[Re]) values ('"+Pub.FormatSQL(NewMenuName.Text.Trim())+"','"+Pub.FormatSQL(NewMenuURL.Text.Trim())+"','"+Pub.FormatSQL(NewMenuRe.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('确认要删除吗?')");
    }
    }
    }
    }
      

  2.   

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

    就是这里那
      

  3.   

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

  4.   

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

  5.   

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

  6.   

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

  7.   

    To hchxxzx:

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

  8.   

    保证程序运行
     .Databind()
      

  9.   

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

  10.   

    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,Re 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页面设置有问题!
      

  11.   


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

  12.   

    问题已解决了,谢谢“ wzd24(牧野) ”的提示,让我重新看了《ADO.NET技术内幕》这本书,知道DATASET或DATATABLE是脱离数据库存在的,不会和数据库同步更新!如果需要后台数据库与DataList的DataSource(即DATASET或DATASET)同步更新,需两边都更新!DataList的DataSource是一直通过ViewStatus保留内存,需通过DataRowView.BeginEdit()或editRow.Delete()方法更新,而后台数据库通过OleDbDataAdapter.Update()方法更新。
    OleDbConnection→OleDbDataAdapter→DataTable或DataSet→DataView→DataRowViewprivate 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 MenuRe = (TextBox)e.Item.FindControl("MenuRe");
        sql = "UPDATE DICTDATA SET [NAME]='"+Pub.FormatSQL(MenuName.Text)+"',[URL]='"+Pub.FormatSQL(MenuURL.Text)+"',[Re]='"+Pub.FormatSQL(MenuRe.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["Re"] = MenuRe.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服务器的负荷,不可取,而且我在本机也没测试成功过!