GridView dynamic footer row creation problem.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • edurazee
    New Member
    • Dec 2009
    • 13

    GridView dynamic footer row creation problem.

    I am able to create BoundFields and Footer-rows dynamically like this in my GridView:

    Code:
        protected void Page_Load(object sender, EventArgs e)
                {
                    CreateGridView();
                }
        
                private void CreateGridView()
                {
                    GridView1.Columns.Clear();
        
                    DataTable dataTable = Book.GetBooksDataSet().Tables[0];
        
                    CommandField cf = new CommandField();
                    cf.ShowEditButton = true;
        
                    GridView1.Columns.Add(cf);
        
                    int colCount = 1;
                    foreach (DataColumn c in dataTable.Columns)
                    {
                        BoundField boundField = new BoundField();
        
                        boundField.DataField = c.ColumnName;
                        boundField.HeaderText = c.ColumnName;
                        //boundField.FooterText = "---";
        
                        if (colCount == 3 || colCount == 5)
                        {
                            boundField.ReadOnly = true;
                        }
        
                        GridView1.Columns.Add(boundField);
                        colCount++;
                    }
        
                    GridView1.ShowFooter = true;
        
                    GridView1.DataSource = dataTable;
                    GridView1.DataBind();
        
                    GridViewRow footerRow = GridView1.FooterRow;
                    Button b = new Button();
                    b.Text = "Add New";
                    int i = 0;
                    footerRow.Cells[i].Controls.Add(b);
                    foreach (DataColumn c in dataTable.Columns)
                    {
                        ++i;
                        TextBox tb = new TextBox();
                        footerRow.Cells[i].Controls.Add(tb);
                    }
                }
        ....................................
        ....................................
        ....................................
        }
    But the problem is, when I click the "Add New" - button, it disappears instantly. And, also I am unable to add any event handler to it. Or intercept its actions like this:


    Code:
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
                {
                    int index = Convert.ToInt32(e.CommandArgument);
                    
                    if (e.CommandName == "Edit")
                    {
                        GridView1.EditIndex = index;
        
                        GridViewRow selectedRow = ((GridView)e.CommandSource).Rows[index];
        
                        //We can get cell data like this
                        string id = selectedRow.Cells[1].Text;
                        string isbn = selectedRow.Cells[2].Text;
        
                        //This is necessary to GridView to be showed up.
                        CreateGridView();
                    }
                    else if (e.CommandName == "Update")
                    {
                        LinkButton updateButton = (LinkButton)e.CommandSource;
        
                        DataControlFieldCell dcfc = (DataControlFieldCell)updateButton.Parent;
        
                        GridViewRow gvr = (GridViewRow)dcfc.Parent;
        
                        //The update...................
                        //Update grid-data to database
                        UpdateDataInTheDatabase(gvr.Cells[1].Controls);                
        
                        //Grid goes back to normal
                        GridView1.EditIndex = -1;
        
                        //This is necessary to GridView to be showed up.
                        CreateGridView();
                    }
                }
    One more thing, I have seen some solutions that suggests to handle the GridView's `rowBound` event. But I need to do it from within `Page_load` event handler, or in, `GridView1_RowC ommand` event handler.
Working...