4
Reply

Add new row to the gridview

Ashwini

Ashwini

Nov 4 2011 5:20 AM
2.1k
I am trying to add new row to the gridview but it is throwing error as 'Object reference not set to an instance of an object.' please can anybody help me.


my .aspx page is

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default9.aspx.cs" Inherits="Default9" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server">
  <div>
 
  <asp:gridview ID="Gridview1" runat="server" ShowFooter="True"
  AutoGenerateColumns="False" onrowcreated="Gridview1_RowCreated">
  <Columns>
  <asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
  <asp:TemplateField HeaderText="Header 1">
  <ItemTemplate>
  <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("firstname") %>'></asp:TextBox>
  </ItemTemplate>
  </asp:TemplateField>
  <asp:TemplateField HeaderText="Header 2">
  <ItemTemplate>
  <asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("lastname") %>'></asp:TextBox>
  </ItemTemplate>
  </asp:TemplateField>
  <asp:TemplateField HeaderText="Header 3">
  <ItemTemplate>
  <asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("ID") %>'></asp:TextBox>
  </ItemTemplate>
  <FooterStyle HorizontalAlign="Right" />
  <FooterTemplate>
  <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row"
  onclick="ButtonAdd_Click" />
  </FooterTemplate>
  </asp:TemplateField>
  <asp:TemplateField>
  <ItemTemplate>
  <asp:LinkButton ID="LinkButton1"  runat="server" onclick="LinkButton1_Click">Remove</asp:LinkButton>
  </ItemTemplate>
  </asp:TemplateField>
 
 
  </Columns>
  </asp:gridview>
  <asp:Button ID="Button1" runat="server" Text="Save" onclick="Button1_Click" />
 
 
  </div>
  </form>
</body>
</html>



and my .aspx.cs code is

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Specialized;
using System.Text;
using System.Data.SqlClient;
public partial class Default9 : System.Web.UI.Page
{
  private const string SP_GET_ALL_CHORES = "SELECT * FROM employee1";
  private void SetInitialRow()
  {
  DataTable dt = new DataTable();
  DataRow dr = null;
  dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
  dt.Columns.Add(new DataColumn("Column1", typeof(string)));
  dt.Columns.Add(new DataColumn("Column2", typeof(string)));
  dt.Columns.Add(new DataColumn("Column3", typeof(string)));
  dr = dt.NewRow();
  dr["RowNumber"] = 1;
  dr["Column1"] = string.Empty;
  dr["Column2"] = string.Empty;
  dr["Column3"] = string.Empty;
  dt.Rows.Add(dr);
  //dr = dt.NewRow();

  //Store the DataTable in ViewState
  ViewState["CurrentTable"] = dt;

  Gridview1.DataSource = dt;
  Gridview1.DataBind();
  }


  private void AddNewRowToGrid()
  {
  int rowIndex = 0;

  if (ViewState["CurrentTable"] != null)
  {
  DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
  DataRow drCurrentRow = null;
  if (dtCurrentTable.Rows.Count > 0)
  {
  for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
  {
  //extract the TextBox values
  TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
  TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
  TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

  drCurrentRow = dtCurrentTable.NewRow();

  drCurrentRow["RowNumber"] = i + 1;
  drCurrentRow["Column1"] = box1.Text;
  drCurrentRow["Column2"] = box2.Text;
  drCurrentRow["Column3"] = box3.Text;

  rowIndex++;
  }
  dtCurrentTable.Rows.Add(drCurrentRow);
  ViewState["CurrentTable"] = dtCurrentTable;

  Gridview1.DataSource = dtCurrentTable;
  Gridview1.DataBind();
  }
  }
  else
  {
  Response.Write("ViewState is null");
  }

  //Set Previous Data on Postbacks
  SetPreviousData();
  }
  private void SetPreviousData()
  {
  int rowIndex = 0;
  if (ViewState["CurrentTable"] != null)
  {
  DataTable dt = (DataTable)ViewState["CurrentTable"];
  if (dt.Rows.Count > 0)
  {
  for (int i = 1; i < dt.Rows.Count; i++)
  {
  TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
  TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
  TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

  box1.Text = dt.Rows[i]["Column1"].ToString();
  box2.Text = dt.Rows[i]["Column2"].ToString();
  box3.Text = dt.Rows[i]["Column3"].ToString();

  rowIndex++;

  }
  }
  // ViewState["CurrentTable"] = dt;

  }
  }

  protected void Page_Load(object sender, EventArgs e)
  {
  if (!Page.IsPostBack)
  {
 
  BindData();
  SetInitialRow();
  }
  }

  private void BindData()
  {
 

  SqlConnection myConnection = new SqlConnection(ConnectionString);
  SqlCommand ad = new SqlCommand(SP_GET_ALL_CHORES, myConnection);
 
  SqlDataAdapter sqlda = new SqlDataAdapter(ad);
  DataTable dt = new DataTable();
  sqlda.Fill(dt);

  Gridview1.DataSource = dt;
  Gridview1.DataBind();

  }
  private string ConnectionString
  {
  get
  {
  return @"data source=hobvision03; initial catalog=master; user id=sa; password=hobvision";
  }
  }
  protected void ButtonAdd_Click(object sender, EventArgs e)
  {
  AddNewRowToGrid();
  }
  protected void Button1_Click(object sender, EventArgs e)
  {
  int rowIndex = 0;
  StringCollection sc = new StringCollection();
  if (ViewState["CurrentTable"] != null)
  {
  DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
  if (dtCurrentTable.Rows.Count > 0)
  {
  for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
  {
  //extract the TextBox values
  TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
  TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
  TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

  //get the values from the TextBoxes
  //then add it to the collections with a comma "," as the delimited values
  sc.Add(box1.Text + "," + box2.Text + "," + box3.Text);
  rowIndex++;
  }
  //Call the method for executing inserts
  InsertRecords(sc);
  }
  }
  }
  //A method that returns a string which calls the connection string from the web.config
  private string GetConnectionString()
  {
  //"DBConnection" is the name of the Connection String
  //that was set up from the web.config file
  return System.Configuration.ConfigurationManager.ConnectionStrings["masterConnectionString"].ConnectionString;
  }
  //A method that Inserts the records to the database
  private void InsertRecords(StringCollection sc)
  {
  SqlConnection conn = new SqlConnection(GetConnectionString());
  StringBuilder sb = new StringBuilder(string.Empty);
  string[] splitItems = null;
  foreach (string item in sc)
  {

  const string sqlStatement = "INSERT INTO employee1 (firstname,lastname,id) VALUES";
  if (item.Contains(","))
  {
  splitItems = item.Split(",".ToCharArray());
  sb.AppendFormat("{0}('{1}','{2}','{3}'); ", sqlStatement, splitItems[0], splitItems[1], splitItems[2]);
  }

  }

  try
  {
  conn.Open();
  SqlCommand cmd = new SqlCommand(sb.ToString(), conn);
  cmd.CommandType = CommandType.Text;
  cmd.ExecuteNonQuery();

  Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Script", "alert('Records Successfuly Saved!');", true);

  }
  catch (System.Data.SqlClient.SqlException ex)
  {
  string msg = "Insert Error:";
  msg += ex.Message;
  throw new Exception(msg);

  }
  finally
  {
  conn.Close();
  }
  }
  // Hide the Remove Button at the last row of the GridView
  protected void Gridview1_RowCreated(object sender, GridViewRowEventArgs e)
  {
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
  DataTable dt = (DataTable)ViewState["CurrentTable"];
  LinkButton lb = (LinkButton)e.Row.FindControl("LinkButton1");
  if (lb != null)
  {
  if (dt.Rows.Count > 1)
  {
  if (e.Row.RowIndex == dt.Rows.Count - 1)
  {
  lb.Visible = false;
  }
  }
  else
  {
  lb.Visible = false;
  }
  }
  }
  }
  protected void LinkButton1_Click(object sender, EventArgs e)
  {
  LinkButton lb = (LinkButton)sender;
  GridViewRow gvRow = (GridViewRow)lb.NamingContainer;
  int rowID = gvRow.RowIndex + 1;
  if (ViewState["CurrentTable"] != null)
  {
  DataTable dt = (DataTable)ViewState["CurrentTable"];
  if (dt.Rows.Count > 1)
  {
  if (gvRow.RowIndex < dt.Rows.Count - 1)
  {
  //Remove the Selected Row data
  dt.Rows.Remove(dt.Rows[rowID]);
  }
  }
  //Store the current data in ViewState for future reference
  ViewState["CurrentTable"] = dt;
  //Re bind the GridView for the updated data
  Gridview1.DataSource = dt;
  Gridview1.DataBind();
  }

  //Set Previous Data on Postbacks
  SetPreviousData();
  }

}



please help me regarding this.

Answers (4)