2013-10-03 4 views
0

У меня есть страница, которая динамически создает gridviews при нажатии кнопки, которая работает нормально. И вместе с этим, создавая сетку, на вершине сетки есть кнопка ссылки, чтобы удалить ее. Теперь то, что я пытаюсь выполнить, заключается в том, что когда я удаляю одну из сеток, она удаляет сетку со страницы и повторно выполняет повторную синхронизацию чисел. Значение, позволяет сказать, что у меня есть следующие:Удаление динамического gridview

Grid1 
Grid2 
Grid3 
Grid4 

Если я решил удалить Grid3, что на самом деле это происходит:

Grid1 
Grid2 
Grid4 

И потом, если я нажимаю что-то на странице для того, чтобы перезагрузить или что-то, то это будет правильно пересинхронизироваться номера:

Grid1 
Grid2 
Grid3 

Я понятия не имею, почему его делать это, и почему он не делает это таким образом, в первую очередь. Может кто-нибудь, пожалуйста, помогите мне с этим?

public partial class Default2 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void Page_Init(object sender, EventArgs e) 
    { 
     string ctrlname = this.Page.Request.Params.Get("__EVENTTARGET"); 

     if (Session["Tables"] == null) 
     { 

      Session.Add("Tables", 1); 

      DataTable dt = GetTable(); 

      Session.Add(Session["Tables"].ToString(), dt); 
      GridView gv = new GridView(); 
      gv.ID = "Grid-" + Session["Tables"].ToString(); 
      gv.DataSource = dt; 
      gv.DataBind(); 
      LinkButton lb = new LinkButton(); 
      lb.ID = "Delete-Grid-" + Session["Tables"].ToString(); 
      lb.Text = "Delete Grid " + Session["Tables"].ToString(); 
      lb.Click += new EventHandler(DeleteGrid); 
      PlaceHolder1.Controls.Add(lb); 
      PlaceHolder1.Controls.Add(gv); 

     } 
     if (IsPostBack) 
     { 
      PlaceHolder1.Controls.Clear(); 
      int next = (int)Session["Tables"]; 

      for (int i = 1; i <= (int)Session["Tables"]; i++) 
      { 
       GridView gv = new GridView(); 
       gv.ID = "Grid-" + i.ToString(); 
       gv.DataSource = (DataTable)Session[i]; 
       gv.DataBind(); 
       LinkButton lb = new LinkButton(); 
       lb.ID = "Delete-Grid-" + i.ToString(); 
       lb.Text = "Delete Grid " + i.ToString(); 
       lb.Click += new EventHandler(DeleteGrid); 
       PlaceHolder1.Controls.Add(lb); 
       PlaceHolder1.Controls.Add(gv); 
      } 
      if (ctrlname == "Button1") 
      { 
       next = next + 1; 
       Session["Tables"] = next; 
       DataTable dt = GetTable(); 
       Session.Add(Session["Tables"].ToString(), dt); 
       GridView gv = new GridView(); 
       gv.ID = "Grid-" + next.ToString(); 
       gv.DataSource = (DataTable)Session[next]; 
       gv.DataBind(); 
       LinkButton lb = new LinkButton(); 
       lb.ID = "Delete-Grid-" + next.ToString(); 
       lb.Text = "Delete Grid " + next.ToString(); 
       lb.Click += new EventHandler(DeleteGrid); 
       PlaceHolder1.Controls.Add(lb); 
       PlaceHolder1.Controls.Add(gv); 
      } 

     } 
    } 



    protected void Button1_Click(object sender, EventArgs e) 
    { 

    } 




    protected void DeleteGrid(object sender, EventArgs e) 
    { 
     LinkButton gridLink = (LinkButton)sender; 
     String gridNum = gridLink.ID.ToString().Split('-').Last(); 

     GridView grid = (GridView)this.Page.FindControl("Grid-" + gridNum); 
     LinkButton lbd = (LinkButton)this.Page.FindControl("Delete-Grid-" + gridNum); 


     PlaceHolder1.Controls.Remove(grid); 
     PlaceHolder1.Controls.Remove(lbd); 

     int next = (int)Session["Tables"]; 
     next = next - 1; 
     Session.Add("Tables", next); 
     Session.Remove(gridNum); 
    } 






    public DataTable GetTable() 
    { 
     // 
     // Here we create a DataTable with a few columns. 
     // 
     // Create Datatable to store all colums 
     DataTable dt = new DataTable(); 
     DataRow dr = null; 
     dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); 
     dt.Columns.Add(new DataColumn("Size", typeof(string))); 
     dt.Columns.Add(new DataColumn("Description", typeof(string))); 
     dt.Columns.Add(new DataColumn("Quantity", typeof(string))); 
     dt.Columns.Add(new DataColumn("Unit", typeof(string))); 
     dt.Columns.Add(new DataColumn("Duration", typeof(string))); 
     dt.Columns.Add(new DataColumn("DurationType", typeof(string))); 
     dt.Columns.Add(new DataColumn("Amount", typeof(string))); 
     dr = dt.NewRow(); 
     dr["RowNumber"] = 1; 
     dr["Size"] = string.Empty; 
     dr["Description"] = string.Empty; 
     dr["Quantity"] = string.Empty; 
     dr["Unit"] = string.Empty; 
     dr["Duration"] = string.Empty; 
     dr["DurationType"] = string.Empty; 
     dr["Amount"] = string.Empty; 
     dt.Rows.Add(dr); 

     dr = dt.NewRow(); 
     dr["RowNumber"] = 2; 
     dr["Size"] = string.Empty; 
     dr["Description"] = string.Empty; 
     dr["Quantity"] = string.Empty; 
     dr["Unit"] = string.Empty; 
     dr["Duration"] = string.Empty; 
     dr["DurationType"] = string.Empty; 
     dr["Amount"] = string.Empty; 
     dt.Rows.Add(dr); 

     dr = dt.NewRow(); 
     dr["RowNumber"] = 3; 
     dr["Size"] = string.Empty; 
     dr["Description"] = string.Empty; 
     dr["Quantity"] = string.Empty; 
     dr["Unit"] = string.Empty; 
     dr["Duration"] = string.Empty; 
     dr["DurationType"] = string.Empty; 
     dr["Amount"] = string.Empty; 
     dt.Rows.Add(dr); 

     dr = dt.NewRow(); 
     dr["RowNumber"] = 4; 
     dr["Size"] = string.Empty; 
     dr["Description"] = string.Empty; 
     dr["Quantity"] = string.Empty; 
     dr["Unit"] = string.Empty; 
     dr["Duration"] = string.Empty; 
     dr["DurationType"] = string.Empty; 
     dr["Amount"] = string.Empty; 
     dt.Rows.Add(dr); 

     dr = dt.NewRow(); 
     dr["RowNumber"] = 5; 
     dr["Size"] = string.Empty; 
     dr["Description"] = string.Empty; 
     dr["Quantity"] = string.Empty; 
     dr["Unit"] = string.Empty; 
     dr["Duration"] = string.Empty; 
     dr["DurationType"] = string.Empty; 
     dr["Amount"] = string.Empty; 
     dt.Rows.Add(dr); 
     return dt; 
    } 


} 

ответ

0

Необходимо сначала узнать жизненный цикл страницы asp.net. обратитесь к статье this ...

В вашем случае удаление даже срабатывает после события загрузки страницы. поэтому синхронизация происходит до того, как строка будет удалена. Возможно, вам нужно поместить код синхронизации в другой метод и вызвать его после удаления ...

+0

У вас есть пример, как мне это нужно? –

+0

Привет Брэд, нет, к сожалению, но это не сложно проверить, просто создайте метод, скопируйте код из блока «if post-back» и вызовите метод после удаления. – Afshin

+0

да, но проблема в том, что нет способа пересинхронизации чисел, он делает это автоматически, но он просто не делает это сразу после того, как я нажму кнопку delete –

Смежные вопросы