2013-05-12 47 views
0

我有一個列表視圖和按鈕列表視圖,按鈕單擊我想要添加InsertItemTemplate中定義的「插入」行。問題是當我點擊按鈕,這一行被添加(我知道這是因爲當做任何回發後此行真的顯示),但沒有顯示/呈現。所以問題是:爲什麼這個改變不適用於第一次回發 - 按鈕點擊?這裏是我的代碼:Listview更改適用於第二次發佈後?

編輯:
全代碼隱藏:

protected void Page_Load(object sender, EventArgs e) 
    {       
     if (!IsPostBack) 
     { 


      ListItem ByName = new ListItem("By name", "Name"); 
      ListItem ByPhone = new ListItem("By phone", "Phone"); 
      ListItem ByEmail = new ListItem("By email", "Email"); 

      FilterTypeDDL.Items.Add(ByName); 
      FilterTypeDDL.Items.Add(ByPhone); 
      FilterTypeDDL.Items.Add(ByEmail); 
      FilterTypeDDL.DataBind(); 
     } 
    } 

    //protected void ListView_ItemCommand(object sender, ListViewCommandEventArgs e) 
    //{    
     //switch (e.CommandName) 
     //{ 
      //case "EditItem":      
      // break; 

      //case "InsertItem": 
      // if (Page.IsValid) 
      // { 
      //  string NameTxt = ((TextBox)(ListView.InsertItem.FindControl("NameTextBox"))).Text.Trim(); 
      //  string PhoneTxt = ((TextBox)(ListView.InsertItem.FindControl("PhoneTextBox"))).Text.Trim(); 
      //  string EmailTxt = ((TextBox)(ListView.InsertItem.FindControl("EmailTextBox"))).Text.Trim(); 
      //  DAORestaurant.InsertRestaurant(NameTxt, PhoneTxt, EmailTxt); 


      //  ListView.InsertItemPosition = InsertItemPosition.None; 
      //  ListView.DataSource = DAORestaurant.GetRestaurants(); 
      //  ListView.DataBind(); 
      //  break; 
      // } 
      // break; 

      //case "CancelCreation": 
      // ListView.InsertItemPosition = InsertItemPosition.None; 
      // ListView.DataSource = DAORestaurant.GetRestaurants(); 
      // ListView.DataBind(); 
      // break; 

      //case "Articles": 
      // Session["Restaurant"] = e.CommandArgument.ToString(); 
      // Control ArticlesCtrl = LoadControl("~/Controls/Article.ascx"); 
      // ListViewItem Item = (ListViewItem)e.Item; 
      // Item.FindControl("CtrlPlaceHolder").Controls.Add(ArticlesCtrl); 
     //} 

    //} 

    protected void closeButton_Click(object sender, EventArgs e) 
    { 

    } 

    protected void newArticleButton_Click(object sender, EventArgs e) 
    { 

    } 

    protected void NewRestaurantBtn_Click(object sender, EventArgs e) 
    { 
     ListView.InsertItemPosition = InsertItemPosition.LastItem; 
     //SetDataSource(); 
     //ListView.DataBind();   
    } 

    protected void ValidateName(object source, ServerValidateEventArgs args) 
    { 
     string NameTxt = ((TextBox)(ListView.InsertItem.FindControl("NameTextBox"))).Text.Trim(); 
     args.IsValid = (NameTxt.Length > 2 && NameTxt.Length < 51); 
    } 

    protected void ValidateUniqueness(object source, ServerValidateEventArgs args) 
    { 
     string NameTxt = ((TextBox)(ListView.InsertItem.FindControl("NameTextBox"))).Text.Trim(); 
     args.IsValid = DAORestaurant.IsUnique(NameTxt); 
    } 

    protected void ValidatePhone(object source, ServerValidateEventArgs args) 
    { 
     string PhoneTxt = ((TextBox)(ListView.InsertItem.FindControl("PhoneTextBox"))).Text.Trim(); 
     Regex regex = new Regex(@"^\d{3}\s\d{3}\s\d{3}$"); 
     args.IsValid = regex.IsMatch(PhoneTxt); 
    } 

    protected void ValidateEmail(object source, ServerValidateEventArgs args) 
    { 
     string EmailTxt = ((TextBox)(ListView.InsertItem.FindControl("EmailTextBox"))).Text.Trim(); 
     Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); 
     args.IsValid = regex.IsMatch(EmailTxt); 
    } 

    protected void ShowAllBtn_Click(object sender, EventArgs e) 
    {    
     Session["ALL"] = true; 
     ListView.DataSource = DAORestaurant.GetRestaurants(); 
     ListView.DataBind(); 
    } 

    protected void FilterBtn_Click(object sender, EventArgs e) 
    { 
     string filterType = FilterTypeDDL.SelectedValue; 
     string substring = StringTB.Text.Trim().ToUpper(); 
     Session["ALL"] = false; 
     Session["FilterType"] = filterType; 
     Session["Substring"] = substring; 


     ListView.DataSource = DAORestaurant.GetRestaurants(substring, filterType); 
     ListView.DataBind(); 
    } 

    protected void ListView_ItemEditing(object sender, ListViewEditEventArgs e) 
    { 
     ListView.EditIndex = e.NewEditIndex; 

     //SetDataSource(); 
     //ListView.DataBind(); 
    } 

    protected void ListView_ItemInserting(object sender, ListViewInsertEventArgs e) 
    { 

    } 

    protected void ListView_ItemCanceling(object sender, ListViewCancelEventArgs e) 
    { 
     if (e.CancelMode == ListViewCancelMode.CancelingInsert) 
     { 
      ListView.InsertItemPosition = InsertItemPosition.None; 
     } 
     else 
     { 
      ListView.EditIndex = -1;     
     } 

     //SetDataSource(); 
     //ListView.DataBind(); 
    } 

    private void SetDataSource() 
    { 
     if ((bool)Session["ALL"]) 
     { 
      ListView.DataSource = DAORestaurant.GetRestaurants(); 
     } 
     else 
     { 
      ListView.DataSource = DAORestaurant.GetRestaurants((string)Session["Substring"], (string)Session["FilterType"]); 
     }    
    } 

註釋掉的代碼是什麼我之前使用,從來就切換到你現在可以看到的,但問題仍然存在。只有當我在每個事件中取消註釋這2條註釋行時,這些更改纔會立即生效,但我知道我不能多次使用這種方法,而且它甚至不應該存在。

+2

代碼behide的完整的代碼,將有助於 – Rab 2013-05-12 17:22:01

+0

這是我在這個BTN點擊事件,我想設置這個InsertItemPosition到.LastItem請求呈現插入操作通過InsertItemTemplate模板進行排序。 – Martin 2013-05-12 18:13:36

+0

我們將需要完整的代碼來查看ListView是如何綁定的以及它在頁面生命週期中的位置。 – pwdst 2013-05-12 20:12:14

回答

0

由於執行順序。嘗試在Page_Load事件設置它:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack && 
     !string.IsNullOrEmpty(Request.Form[NewRestaurantBtn.ClientID])) 
    { 
     ListView.InsertItemPosition = InsertItemPosition.LastItem; 
    } 
} 
+0

但我只需要在單擊NewRestaurantBtn時插入插入行。這會將它添加到每個回發列表視圖是嗎? – Martin 2013-05-12 20:48:36

+0

@Martin,自己試試。但據我所知'string.IsNullOrEmpty(Request.Form [NewRestaurantBtn.ClientID])'應該只有'false',如果該按鈕被點擊。 – 2013-05-12 22:53:11

+0

當然,我已經嘗試了:)但是這次更改甚至出現在第3或第4次點擊中,這使我更困惑:)...我一定在某處做了一些可怕的錯誤 – Martin 2013-05-13 07:32:20

相關問題