I created a gridview and added a chechbox in a column that checked it will display the currently date and time in the corresponding column, it worked well but when I added the checkbox in the footer it gaved me an error again which is "Object reference not set to an instance of an object. " in the line " loggedInDateTime.Text = DateTime.Now.ToString();"
HTML code
<asp:GridView ID="GridView1" runat="server" align="center" BackColor="White" BorderColor="#CCCCCC"
BorderStyle="None" BorderWidth="1px" CellPadding="4" AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1" DataKeyNames="Attendance_ID" ShowFooter="True"
Style="margin-left: 183px; margin-top: 0px;">
<Columns>
<asp:TemplateField>
<FooterTemplate>
<asp:LinkButton ValidationGroup="INSERT" OnClick="lbInsert_Click" ID="lbInsert" runat="server"
ForeColor="#000066">Insert</asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
<asp:TemplateField HeaderText="No." SortExpression="Attendance_ID">
<EditItemTemplate>
<asp:TextBox ID="txtAttendanceID" runat="server" Text='<%# Bind("Attendance_ID") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblAttendanceID" runat="server" Text='<%# Bind("Attendance_ID") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtID" runat="server" BorderStyle="None"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" SortExpression="Attendance_Name">
<EditItemTemplate>
<asp:TextBox ID="txtAttendanceName" runat="server" Text='<%# Bind("Attendance_Name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblAttendanceName" runat="server" Text='<%# Bind("Attendance_Name") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtName" runat="server" BorderStyle="None"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Attendance" SortExpression="Attendance_Con">
<EditItemTemplate>
<asp:TextBox ID="txtAttendanceCon" runat="server" Text='<%# Bind("Attendance_Con") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblAttendanceCon" runat="server" Text='<%# Bind("Attendance_Con") %>'></asp:Label>
<asp:CheckBox ID="CheckBox2" runat="server" BorderStyle="None" AutoPostBack= "True" OnCheckedChanged="LoggedIn"></asp:CheckBox>
</ItemTemplate>
<FooterTemplate>
<asp:CheckBox ID="cbAttendanceCon" runat="server" BorderStyle="None" AutoPostBack= "True" OnCheckedChanged="LoggedIn"></asp:CheckBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Login Time" SortExpression="LogInDate_Time">
<EditItemTemplate>
<asp:TextBox ID="txtLogInDateTime" runat="server" Text='<%# Bind("LogInDate_Time") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblLoggedInDateTime" runat="server" Text='<%# Bind("LogInDate_Time") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtLogIn" runat="server" BorderStyle="None"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Leaving" SortExpression="Leaving_Con">
<EditItemTemplate>
<asp:TextBox ID="txtLeavingCon" runat="server" Text='<%# Bind("Leaving_Con") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblLeavingCon" runat="server" Text='<%# Bind("Leaving_Con") %>'></asp:Label>
<asp:CheckBox ID="CheckBox1" runat="server" BorderStyle="None" AutoPostBack="True" OnCheckedChanged="LoggedOut"></asp:CheckBox>
</ItemTemplate>
<FooterTemplate>
<asp:CheckBox ID="cbLeavingCon" runat="server" BorderStyle="None" AutoPostBack="True" OnCheckedChanged="LoggedOut"></asp:CheckBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Logout Time" SortExpression="LogOutDate_Time">
<EditItemTemplate>
<asp:TextBox ID="txtLogOutDateTime" runat="server" Text='<%# Bind("LogOutDate_Time") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblLoggedOutDateTime" runat="server" Text='<%# Bind("LogOutDate_Time") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtLogOut" runat="server" BorderStyle="None"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="White" ForeColor="#000066" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#007DBB" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#00547E" />
</asp:GridView>
<br />
<br />
<p style="width: 1330px; height: 33px">
<asp:Button ID="btnSave" Text="Save" runat="server" OnClick="btnSave_Click" Style="margin-left: 650px"
Width="85px" Height="32px" BackColor="#6699FF" ForeColor="White" />
<br />
</p>
<p style="margin-left: 583px">
<asp:Label ID="lblMessage" ForeColor="Green" runat="server" />
</p>
<br />
C#
protected void Page_Load(object sender, EventArgs e)
{
}
protected void LoggedIn(object sender, EventArgs e)
{
CheckBox checkedCheckBox = (sender as CheckBox);
GridViewRow checkedRow = (checkedCheckBox.NamingContainer as GridViewRow);
Label loggedInDateTime = checkedRow.FindControl("lblLoggedInDateTime") as Label;
if (checkedCheckBox.Checked)
{
loggedInDateTime.Text = DateTime.Now.ToString();
}
else
{
loggedInDateTime.Text = "";
}
}
protected void LoggedOut(object sender, EventArgs e)
{
CheckBox checkedCheckBox = (sender as CheckBox);
GridViewRow checkedRow = (checkedCheckBox.NamingContainer as GridViewRow);
Label loggedOutDateTime = checkedRow.FindControl("lblLoggedOutDateTime") as Label;
if (checkedCheckBox.Checked)
{
loggedOutDateTime.Text = DateTime.Now.ToString();
}
else
{
loggedOutDateTime.Text = "";
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
string id = (row.FindControl("lblAttendanceID") as Label).Text;
string name = (row.FindControl("lblAttendanceName") as Label).Text;
string loggedInTime = (row.FindControl("lblLoggedInDateTime") as Label).Text;
string loggedOutTime = (row.FindControl("lblLoggedOutDateTime") as Label).Text;
InsertData(id, name, loggedInTime, loggedOutTime);
}
lblMessage.Text = "All Records Saved Successfully!!";
}
public void InsertData(string id, string name, string inTime, string outTime)
{
//Your saving code.
}
protected void lbInsert_Click(object sender, EventArgs e)
{
ObjectDataSource1.InsertParameters["Attendance_ID"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TxtID")).Text;
ObjectDataSource1.InsertParameters["Attendance_Name"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TxtName")).Text;
ObjectDataSource1.InsertParameters["Attendance_Con"].DefaultValue = ((CheckBox)GridView1.FooterRow.FindControl("cbAttendanceCon")).Text;
ObjectDataSource1.InsertParameters["LogInDate_Time"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TxtLogIn")).Text;
ObjectDataSource1.InsertParameters["Leaving_Con"].DefaultValue = ((CheckBox)GridView1.FooterRow.FindControl("cbLeavingCon")).Text;
ObjectDataSource1.InsertParameters["LogOutDate_Time"].DefaultValue = ((TextBox)GridView1.FooterRow.FindControl("TxtLogOut")).Text;
ObjectDataSource1.Insert();
}
}
the error appeared after I adding the footer to the columns which are "Attendance_Con" and " Leaving_Con" .