把Page_Load里的绑定代码写在if(!Page.IsPostBack){}里

解决方案 »

  1.   

    namespace Portal.UserControl
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using WebComponent; /// <summary>
    /// wcMenus 的摘要说明。
    /// </summary>
    public abstract class wcMenus : ModuleControl
    {
    protected System.Web.UI.WebControls.Label Label6;
    protected System.Web.UI.WebControls.Label Label5;
    protected System.Web.UI.WebControls.Label Label4;
    protected System.Web.UI.WebControls.Label Label3;
    protected System.Web.UI.WebControls.Label Label2;
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.DropDownList cbxMenuType;
    protected System.Web.UI.WebControls.TextBox txtMenuFuncNo;
    protected System.Web.UI.WebControls.TextBox txtMenuDesc;
    protected System.Web.UI.WebControls.TextBox txtMenuCaption;
    protected System.Web.UI.WebControls.TextBox txtMenuNo;
    protected System.Web.UI.WebControls.TextBox txtMenuImageURL;
    protected System.Web.UI.WebControls.Button btnAdd;
    protected System.Web.UI.WebControls.Button btnDelete;
    protected System.Web.UI.WebControls.Button btnSave;
    protected System.Web.UI.WebControls.Button btnCancel;
    protected System.Web.UI.WebControls.ListBox listMenu;
    protected System.Web.UI.WebControls.TextBox txtMenuItem;
    protected System.Web.UI.WebControls.Label Label7;
    protected System.Web.UI.WebControls.Label Label8;
    protected System.Web.UI.WebControls.ListBox listLinkMenu; private Menu mMenu;
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!this.IsPostBack)
    {
    LoadDataIntoList();
    } } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    mMenu=(Menu)Session["Menu"];
    //FillTreeView();
    }

    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
    this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
    this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
    this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
    this.listMenu.SelectedIndexChanged += new System.EventHandler(this.listMenu_SelectedIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void LoadDataIntoList()
    {
    DataSet ds=new DataSet();

    ListItem ls= new ListItem("所有功能","");
    listMenu.Items.Add(ls); mPortal.SysManager.Connection.Fill("SELECT MENUNO,MENUCAPTION=REPLICATE('  ',(MENULEVEL))+MENUCAPTION FROM MENUREC ORDER BY MENUSUC",ref ds,"MENUREC");
    foreach(DataRow Row in ds.Tables["MENUREC"].Rows)
    {
    ls=new ListItem(Row["MENUCAPTION"].ToString(),Row["MENUNO"].ToString()); listMenu.Items.Add(ls);
    }
    } private void SetValueToObject()
    {
    /* mMenu.ClearLinkMenu("");
    foreach(ListItem ls in listLinkMenu.Items)
    {
    if(ls.Selected)
    {
    MenuLink ml=new MenuLink(mMenu,mPortal.SysManager);
    ml.MenuLinkNo=mMenu.MenuNo ;
    ml.MenuLinkFromNo=ls.Text.Substring(0,ls.Text.IndexOf("-")).Trim(); 
    mMenu.Links.Add(ml);
    }
    }
    */
    mMenu.MenuItem=txtMenuItem.Text;
    mMenu.MenuNo=txtMenuNo.Text;
    mMenu.MenuCaption =txtMenuCaption.Text;
    mMenu.MenuDesc =txtMenuDesc.Text ;
    if(cbxMenuType.SelectedIndex>-1)
    mMenu.MenuType =Convert.ToInt16(cbxMenuType.SelectedItem.Value);
    else
    mMenu.MenuType=1;
    mMenu.MenuFuncNo=txtMenuFuncNo.Text ; 
    mMenu.MenuImageUrl=txtMenuImageURL.Text; } private void SetValueToControl()
    {
    txtMenuItem.Text =mMenu.MenuItem; 
    txtMenuNo.Text =mMenu.MenuNo;
    txtMenuCaption.Text=mMenu.MenuCaption;
    txtMenuDesc.Text=mMenu.MenuDesc;
    txtMenuFuncNo.Text=mMenu.MenuFuncNo; 
    cbxMenuType.SelectedIndex=mMenu.MenuType-1;
    txtMenuImageURL.Text=mMenu.MenuImageUrl;
    if(mMenu.MenuType!=1)
    {
    btnAdd.Enabled =false;
    }
    else
    {
    btnAdd.Enabled =true;
    }
    LinkMenuBindData();
    } private void btnAdd_Click(object sender, System.EventArgs e)
    {
    Menu mTmp=null;
    if(listMenu.SelectedIndex>-1)
    {
    if(listMenu.SelectedItem.Value!="")
    {
    mTmp=new  Menu(null,mPortal.SysManager);
    mTmp.Seek(listMenu.SelectedItem.Value);
    }
    }
    mMenu=new Menu(mTmp,mPortal.SysManager);
    Session["Menu"]=mMenu;
    ClearControl();
    btnSave.Enabled =true;
    } private void ClearControl()
    {
    txtMenuItem.Text="";
    txtMenuNo.Text ="";
    txtMenuCaption.Text="";
    txtMenuDesc.Text="";
    txtMenuFuncNo.Text=""; 
    cbxMenuType.SelectedIndex=0;
    txtMenuImageURL.Text="";
    } private void btnDelete_Click(object sender, System.EventArgs e)
    {
    if(mMenu!=null)
    {
    RemoveFromComboBox(mMenu);
    mMenu.Delete();
    }

    } private void RemoveFromComboBox(Menu oldMenu)
    {
    string MenuNo=oldMenu.MenuNo; oldMenu.GetAllNextMenus(); 
    foreach(Menu oMu in oldMenu.NextLevelMenus)
    {
    RemoveFromComboBox(oMu);
    }
    foreach(ListItem li in listMenu.Items)
    {
    if(li.Value==MenuNo)
    {
    listMenu.Items.Remove(li);
    break;
    }
    }
    }


    private void InsertIntoComboBox(Menu newMenu)
    {
    string mMenuNo="";
    ListItem mItem=null;
    int mIndex=0; if(newMenu.MenuType==1)
    {
    if(newMenu.Parent!=null)
    {
    mMenuNo=newMenu.Parent.MenuNo;
    foreach(ListItem li in listMenu.Items)
    {
    if(li.Value ==mMenuNo)
    {
    string s=""; s.PadLeft(newMenu.MenuLevel,' ');
    mItem=new ListItem(s+ newMenu.MenuCaption,newMenu.MenuNo);
    mIndex=listMenu.Items.IndexOf(li)+1;
    break;
    }
    }
    if(mItem!=null)
    listMenu.Items.Insert(mIndex,mItem);

    }
    else
    {
    mItem=new ListItem(newMenu.MenuCaption,newMenu.MenuNo);
    listMenu.Items.Add(mItem);
    }
    }
    } private void btnSave_Click(object sender, System.EventArgs e)
    {
    bool isNew=mMenu.IsNewRecord; if(mMenu!=null)
    {
    SetValueToObject();

    mMenu.Save();
    if(isNew)
    InsertIntoComboBox(mMenu);
    else
    UpdateList(mMenu);
    }
    } private void UpdateList(Menu mu)
    {
    if(listMenu.SelectedIndex>-1)
    {
    listMenu.SelectedItem.Text =mu.MenuCaption;
    listMenu.SelectedItem.Value =mu.MenuNo ;
    }
    } private void btnCancel_Click(object sender, System.EventArgs e)
    {
    ClearControl();
    } private void listMenu_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    if(listMenu.SelectedIndex >-1)
    {
    if(listMenu.SelectedItem.Value !="")
    {
    if(mMenu==null)
    mMenu=new Menu(null,mPortal.SysManager); mMenu.Seek(listMenu.SelectedItem.Value);
    SetValueToControl();
    Session["Menu"]=mMenu;
    }
    }
    } private void LinkMenuBindData()
    {
    DataSet ds=new DataSet();

    listLinkMenu.Items.Clear();
    mPortal.SysManager.Connection.Fill("SELECT 'SELECTED'=CASE WHEN EXISTS(SELECT * FROM MENULINKREC WHERE MENULINKFROMNO=MENUNO AND MENULINKNO='"+mMenu.MenuNo+"') THEN 1 ELSE 0 END, MENUNO,MENUCAPTION=REPLICATE('  ',(MENULEVEL))+MENUNO+'-'+MENUCAPTION FROM MENUREC WHERE MENUNO<>'"+mMenu.MenuNo+"' ORDER BY MENUSUC",ref ds,"MENUREC");
    listLinkMenu.DataSource =ds;
    listLinkMenu.DataValueField ="SELECTED";
    listLinkMenu.DataTextField  ="MENUCAPTION";
    listLinkMenu.DataBind(); foreach(ListItem li in listLinkMenu.Items)
    {
    li.Selected =(li.Value=="1");
    }
    ds.Dispose();
    ds=null;
    }
    }
    }
      

  2.   

    将Document的SmartNavaiter设置为true
      

  3.   

    将页面初始化的数据绑定部分写到if(!IsPostBack)里。如果是第二个的话,可以用ddl.SelectedIndex=ddl.Items.IndexOf(ddl.Items.FindByValue(CurrentSelectItem));
    来指定当前选择项
      

  4.   

    问题是我在Button_Click事件中检查发现,选择项目始终自动变成第一项!这是为什么啊????
    页面首先执行Page_Load函数,然后才执行Button_Click()函数,
    在Page_Load函数里面你把ddl的数据清空了,再填上新的数据,请问怎么可能会保存以前的选项(那个选项已经不存在了)
    你应该在有AutoPostBack的哪个dll的SelecteIndexChanged消息处理函数里面邦定第二个dll的数据