2
Answers

Object reference not set to an instance of an object

john kanyora

john kanyora

6y
185
1
Hi, am having trouble performing CRUD operation from my gridview.am getting the error"Object reference not set to an instance of an object"..the error is at this line of code
" (e.Row.Cells[2].Controls[2] as LinkButton).Attributes["onclick"] = "return confirm('Do you want to delete this row?');";
below i have the codes am using..this is the aspx code for populating the gridview
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="TransactionId"
OnRowDataBound="OnRowDataBound" OnRowEditing="OnRowEditing" OnRowCancelingEdit="OnRowCancelingEdit"
OnRowUpdating="OnRowUpdating" OnRowDeleting="OnRowDeleting" EmptyDataText="No records has been added.">
<Columns>
<asp:TemplateField HeaderText="CompanyID" ItemStyle-Width="150">
<ItemTemplate>
<asp:Label ID="lblCompanyID" runat="server" Text='<%# Eval("CompanyID") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCompanyID" runat="server" Text='<%# Eval("CompanyID") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="BranchID" ItemStyle-Width="150">
<ItemTemplate>
<asp:Label ID="lblBranchID" runat="server" Text='<%# Eval("BranchID") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtBranchID" runat="server" Text='<%# Eval("BranchID") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="DepartmentID" ItemStyle-Width="150">
<ItemTemplate>
<asp:Label ID="lblDepartmentID" runat="server" Text='<%# Eval("DepartmentID") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtDepartmentID" runat="server" Text='<%# Eval("DepartmentID") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="GLaccountNumber" ItemStyle-Width="150">
<ItemTemplate>
<asp:Label ID="lblGLaccountNumber" runat="server" Text='<%# Eval("GLaccountNumber") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtGLaccountNumber" runat="server" Text='<%# Eval("GLaccountNumber") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="CostCenterID" ItemStyle-Width="150">
<ItemTemplate>
<asp:Label ID="lblCostCenterID" runat="server" Text='<%# Eval("CostCenterID") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCostCenterID" runat="server" Text='<%# Eval("CostCenterID") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="CostPercentage" ItemStyle-Width="150">
<ItemTemplate>
<asp:Label ID="lblCostPercentage" runat="server" Text='<%# Eval("CostPercentage") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCostPercentage" runat="server" Text='<%# Eval("CostPercentage") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ButtonType="Link" ShowEditButton="true" ShowDeleteButton="true"
ItemStyle-Width="150" />
</Columns>
</asp:GridView>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse">
<tr>
<td style="width: 150px">
CompanyID<br />
<asp:TextBox ID="txtCompanyID" runat="server" Width="140" />
</td>
<td style="width: 150px">
BranchID<br />
<asp:TextBox ID="txtBranchID" runat="server" Width="140" />
</td>
<td style="width: 150px">
DepartmentID<br />
<asp:TextBox ID="txtDepartmentID" runat="server" Width="140" />
</td>
<td style="width: 150px">
GLaccountNumber<br />
<asp:TextBox ID="txtGLaccountNumber" runat="server" Width="140" />
</td>
<td style="width: 150px">
CostCenterID<br />
<asp:TextBox ID="txtCostCenterID" runat="server" Width="140" />
</td>
<td style="width: 150px">
CostPercentage<br />
<asp:TextBox ID="txtCostPercentage" runat="server" Width="140" />
</td>
<td style="width: 100px">
<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="Insert" />
</td>
</tr>
</table>
</form>
This is the code behind
private void BindGrid()
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("Customers_CRUD"))
{
cmd.Parameters.AddWithValue("@Action", "SELECT");
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
}
}
}

protected void Insert(object sender, EventArgs e)
{
string CompanyID = txtCompanyID.Text;
string BranchID = txtBranchID.Text;
string DepartmentID = txtDepartmentID.Text;
string GLaccountNumber = txtGLaccountNumber.Text;
string CostCenterID = txtCostCenterID.Text;
string CostPercentage = txtCostPercentage.Text;
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("Customers_CRUD"))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Action", "INSERT");
cmd.Parameters.AddWithValue("@CompanyID", CompanyID);
cmd.Parameters.AddWithValue("@BranchID", BranchID);
cmd.Parameters.AddWithValue("@DepartmentID", DepartmentID);
cmd.Parameters.AddWithValue("@GLaccountNumber", GLaccountNumber);
cmd.Parameters.AddWithValue("@CostCenterID", CostCenterID);
cmd.Parameters.AddWithValue("@CostPercentage", CostPercentage);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
this.BindGrid();
}

protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
this.BindGrid();
}

protected void OnRowCancelingEdit(object sender, EventArgs e)
{
GridView1.EditIndex = -1;
this.BindGrid();
}

protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GridView1.Rows[e.RowIndex];
int TransactionId = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
string CompanyID = (row.FindControl("txtCompanyID") as TextBox).Text;
string BranchID = (row.FindControl("txtBranchID") as TextBox).Text;
string DepartmentID = (row.FindControl("txtDepartmentID ") as TextBox).Text;
string GLaccountNumber = (row.FindControl("txtGLaccountNumber") as TextBox).Text;
string CostCenterID = (row.FindControl("txtCostCenterID") as TextBox).Text;
string CostPercentage = (row.FindControl("txtCostPercentage") as TextBox).Text;

string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("Customers_CRUD"))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Action", "UPDATE");
cmd.Parameters.AddWithValue("@CompanyID", CompanyID);
cmd.Parameters.AddWithValue("@BranchID", BranchID);
cmd.Parameters.AddWithValue("@DepartmentID", DepartmentID);
cmd.Parameters.AddWithValue("@GLaccountNumber", GLaccountNumber);
cmd.Parameters.AddWithValue("@CostCenterID", CostCenterID);
cmd.Parameters.AddWithValue("@CostPercentage", CostPercentage);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
GridView1.EditIndex = -1;
this.BindGrid();
}

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex != GridView1.EditIndex)
{
(e.Row.Cells[2].Controls[2] as LinkButton).Attributes["onclick"] = "return confirm('Do you want to delete this row?');";
}
}

protected void OnRowDeleting(object sender, GridViewDeleteEventArgs e)
{
int TransactionId = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("Customers_CRUD"))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Action", "DELETE");
cmd.Parameters.AddWithValue("@TransactionId", TransactionId);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
this.BindGrid();

Answers (2)