2013-05-12 46 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

相关问题