Hi akhter,
Check this example. Now please take its reference and correct your code.
HTML
<asp:GridView ID="gvtrans" runat="server" AllowSorting="True" AutoGenerateColumns="False" CssClass="active right"
BorderColor="#E7E7FF" itemstyle-wrap="True" GridLines="Horizontal" ShowHeaderWhenEmpty="True" OnRowDataBound="gvlevleone_RowDataBound"
ShowFooter="True" BackColor="White" BorderStyle="None" BorderWidth="1px" CellPadding="3" Style="margin-top: 0px" OnRowCreated="gvlevleone_RowCreated">
<AlternatingRowStyle CssClass="altrowstyle" BackColor="#F7F7F7" />
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<HeaderStyle CssClass="headerstyle" BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
<RowStyle CssClass="rowstyle" BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<Columns>
<asp:TemplateField HeaderText="Code">
<ItemTemplate>
<asp:TextBox ID="txtcode" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Head">
<ItemTemplate>
<asp:Label ID="lbfourdr" runat="server" Visible="false" />
<asp:DropDownList runat="server" AutoPostBack="true" ID="ddlfourdr" Width="250px" OnSelectedIndexChanged="ddlfoudr_SelectedIndexChanged">
<asp:ListItem Text="Select" Value=""></asp:ListItem>
<asp:ListItem Text="Credit" Value="Credit"></asp:ListItem>
<asp:ListItem Text="Debit" Value="Debit"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Debit">
<ItemTemplate>
<asp:TextBox ID="txtDebit" runat="server" AutoPostBack="true" OnTextChanged="txtDebit_TextChanged"></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lblTotal" runat="server"></asp:Label>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Credit">
<ItemTemplate>
<asp:TextBox ID="txtCredit" runat="server" AutoPostBack="true" OnTextChanged="txtCredit_TextChanged"></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lblTotalcr" runat="server"></asp:Label>
</FooterTemplate>
</asp:TemplateField>
</Columns>
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
<SortedAscendingCellStyle BackColor="#F4F4FD" />
<SortedAscendingHeaderStyle BackColor="#5A4C9D" />
<SortedDescendingCellStyle BackColor="#D8D8F0" />
<SortedDescendingHeaderStyle BackColor="#3E3277" />
</asp:GridView>
<asp:Button Text="Add Row" runat="server" OnClick="OnAdd" />
<asp:Button Text="Save" runat="server" OnClick="OnSave" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
CalculateDebitCredittotal()
});
function CalculateDebitCredittotal() {
var creditTotal = 0;
var debitTotal = 0;
$("[id*=gvtrans] tr:has(td)").each(function () {
if ($(this).find($("[id*=txtCredit]")).val() != "" && $(this).find($("[id*=txtCredit]")).val() != undefined) {
creditTotal += parseFloat($(this).find($("[id*=txtCredit]")).val());
}
if ($(this).find($("[id*=txtDebit]")).val() != "" && $(this).find($("[id*=txtDebit]")).val() != undefined) {
debitTotal += parseFloat($(this).find($("[id*=txtDebit]")).val());
}
$(this).find($("[id*=lblTotal]")).html("Total:" + debitTotal.toString());
$(this).find($("[id*=lblTotalcr]")).html("Total:" + creditTotal.toString());
});
}
</script>
Namespaces
C#
using System.Data;
using System.Data.SqlClient;
VB.Net
Imports System.Data
Imports System.Data.SqlClient
Code
C#
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=master;uid=sa;pwd=pass@123;");
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SetInitialRow();
}
}
protected void gvlevleone_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
TextBox txtDebit = (TextBox)e.Row.FindControl("txtDebit");
TextBox txtCredit = (TextBox)e.Row.FindControl("txtCredit");
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows[e.Row.RowIndex]["ddlfourdr"].ToString() == "Debit")
{
txtCredit.Enabled = false;
}
if (dt.Rows[e.Row.RowIndex]["ddlfourdr"].ToString() == "Credit")
{
txtDebit.Enabled = false;
}
}
}
protected void gvlevleone_RowCreated(object sender, GridViewRowEventArgs e)
{
}
protected void ddlfoudr_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddlfourdr = (DropDownList)sender;
GridViewRow row = (GridViewRow)ddlfourdr.NamingContainer;
TextBox txtcodedr = (TextBox)row.FindControl("txtcode");
TextBox txtDebit = (TextBox)row.FindControl("txtDebit");
TextBox txtCredit = (TextBox)row.FindControl("txtCredit");
if (ddlfourdr.SelectedValue == "Debit")
{
txtCredit.Enabled = false;
}
if (ddlfourdr.SelectedValue == "Credit")
{
txtDebit.Enabled = false;
}
}
protected void txtDebit_TextChanged(object sender, EventArgs e)
{
}
protected void txtCredit_TextChanged(object sender, EventArgs e)
{
}
protected void OnAdd(object sender, EventArgs e)
{
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)gvtrans.Rows[rowIndex].Cells[0].FindControl("txtcode");
DropDownList box2 = (DropDownList)gvtrans.Rows[rowIndex].Cells[1].FindControl("ddlfourdr");
TextBox box3 = (TextBox)gvtrans.Rows[rowIndex].Cells[2].FindControl("txtDebit");
TextBox box4 = (TextBox)gvtrans.Rows[rowIndex].Cells[3].FindControl("txtCredit");
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["RowNumber"] = i + 1;
dtCurrentTable.Rows[i - 1]["txtcode"] = box1.Text;
dtCurrentTable.Rows[i - 1]["ddlfourdr"] = box2.Text;
dtCurrentTable.Rows[i - 1]["txtDebit"] = box3.Text;
dtCurrentTable.Rows[i - 1]["txtCredit"] = box4.Text;
rowIndex++;
}
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
gvtrans.DataSource = dtCurrentTable;
gvtrans.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}
//Set Previous Data on Postbacks
SetPreviousData();
}
protected void OnSave(object sender, EventArgs e)
{
DataTable dt = ViewState["CurrentTable"] as DataTable;
for (int i = 0; i < dt.Rows.Count - 1; i++)
{
string query = "INSERT INTO tbl_Cashpayment (CP_ID,Level_Four_ID_Dr,Level_Four_ID_Cr,CP_Entry_Date) VALUES(@Id,@Dr,@Cr,@Date)";
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Parameters.AddWithValue("@Id", Convert.ToInt32(dt.Rows[i]["txtcode"]));
cmd.Parameters.AddWithValue("@Dr", dt.Rows[i]["txtDebit"] != null ? dt.Rows[i]["txtDebit"] : DBNull.Value);
cmd.Parameters.AddWithValue("@Cr", dt.Rows[i]["txtCredit"] != null ? dt.Rows[i]["txtCredit"] : DBNull.Value);
cmd.Parameters.AddWithValue("@Date", DateTime.Now);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
private void SetInitialRow()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("txtcode", typeof(string)));
dt.Columns.Add(new DataColumn("ddlfourdr", typeof(string)));
dt.Columns.Add(new DataColumn("txtDebit", typeof(string)));
dt.Columns.Add(new DataColumn("txtCredit", typeof(string)));
dt.Columns.Add(new DataColumn("ddltype", typeof(string)));
DataRow dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["txtcode"] = String.Empty;
dr["txtDebit"] = String.Empty;
dr["txtCredit"] = String.Empty;
dt.Rows.Add(dr);
ViewState["CurrentTable"] = dt;
gvtrans.DataSource = dt;
gvtrans.DataBind();
}
private void SetPreviousData()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TextBox box1 = (TextBox)gvtrans.Rows[rowIndex].Cells[0].FindControl("txtcode");
DropDownList box2 = (DropDownList)gvtrans.Rows[rowIndex].Cells[1].FindControl("ddlfourdr");
TextBox box3 = (TextBox)gvtrans.Rows[rowIndex].Cells[2].FindControl("txtDebit");
TextBox box4 = (TextBox)gvtrans.Rows[rowIndex].Cells[3].FindControl("txtCredit");
box1.Text = dt.Rows[i]["txtcode"].ToString();
box2.Text = dt.Rows[i]["ddlfourdr"].ToString();
box3.Text = dt.Rows[i]["txtDebit"].ToString();
box4.Text = dt.Rows[i]["txtCredit"].ToString();
rowIndex++;
}
}
}
}
VB.Net
Private con As SqlConnection = New SqlConnection("Data Source=.;Initial Catalog=master;uid=sa;pwd=pass@123;")
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
SetInitialRow()
End If
End Sub
Protected Sub gvlevleone_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If (e.Row.RowType = DataControlRowType.DataRow) Then
Dim txtDebit As TextBox = TryCast(e.Row.FindControl("txtDebit"), TextBox)
Dim txtCredit As TextBox = TryCast(e.Row.FindControl("txtCredit"), TextBox)
Dim dt As DataTable = TryCast(ViewState("CurrentTable"), DataTable)
If (dt.Rows(e.Row.RowIndex)("ddlfourdr").ToString() = "Debit") Then
txtCredit.Enabled = False
End If
If (dt.Rows(e.Row.RowIndex)("ddlfourdr").ToString() = "Credit") Then
txtDebit.Enabled = False
End If
End If
End Sub
Protected Sub gvlevleone_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
End Sub
Protected Sub ddlfoudr_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim ddlfourdr As DropDownList = CType(sender, DropDownList)
Dim row As GridViewRow = CType(ddlfourdr.NamingContainer, GridViewRow)
Dim txtcodedr As TextBox = CType(row.FindControl("txtcode"), TextBox)
Dim txtDebit As TextBox = CType(row.FindControl("txtDebit"), TextBox)
Dim txtCredit As TextBox = CType(row.FindControl("txtCredit"), TextBox)
If ddlfourdr.SelectedValue = "Debit" Then
txtCredit.Enabled = False
End If
If ddlfourdr.SelectedValue = "Credit" Then
txtDebit.Enabled = False
End If
End Sub
Protected Sub txtDebit_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Protected Sub txtCredit_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Protected Sub OnAdd(ByVal sender As Object, ByVal e As EventArgs)
Dim rowIndex As Integer = 0
If ViewState("CurrentTable") IsNot Nothing Then
Dim dtCurrentTable As DataTable = CType(ViewState("CurrentTable"), DataTable)
Dim drCurrentRow As DataRow = Nothing
If dtCurrentTable.Rows.Count > 0 Then
For i As Integer = 1 To dtCurrentTable.Rows.Count
Dim box1 As TextBox = CType(gvtrans.Rows(rowIndex).Cells(0).FindControl("txtcode"), TextBox)
Dim box2 As DropDownList = CType(gvtrans.Rows(rowIndex).Cells(1).FindControl("ddlfourdr"), DropDownList)
Dim box3 As TextBox = CType(gvtrans.Rows(rowIndex).Cells(2).FindControl("txtDebit"), TextBox)
Dim box4 As TextBox = CType(gvtrans.Rows(rowIndex).Cells(3).FindControl("txtCredit"), TextBox)
drCurrentRow = dtCurrentTable.NewRow()
drCurrentRow("RowNumber") = i + 1
dtCurrentTable.Rows(i - 1)("txtcode") = box1.Text
dtCurrentTable.Rows(i - 1)("ddlfourdr") = box2.Text
dtCurrentTable.Rows(i - 1)("txtDebit") = box3.Text
dtCurrentTable.Rows(i - 1)("txtCredit") = box4.Text
rowIndex += 1
Next
dtCurrentTable.Rows.Add(drCurrentRow)
ViewState("CurrentTable") = dtCurrentTable
gvtrans.DataSource = dtCurrentTable
gvtrans.DataBind()
End If
Else
Response.Write("ViewState is null")
End If
SetPreviousData()
End Sub
Protected Sub OnSave(ByVal sender As Object, ByVal e As EventArgs)
Dim dt As DataTable = TryCast(ViewState("CurrentTable"), DataTable)
For i As Integer = 0 To dt.Rows.Count - 1 - 1
Dim query As String = "INSERT INTO tbl_Cashpayment (CP_ID,Level_Four_ID_Dr,Level_Four_ID_Cr,CP_Entry_Date) VALUES(@Id,@Dr,@Cr,@Date)"
Using cmd As SqlCommand = New SqlCommand(query)
cmd.Parameters.AddWithValue("@Id", Convert.ToInt32(dt.Rows(i)("txtcode")))
cmd.Parameters.AddWithValue("@Dr", If(dt.Rows(i)("txtDebit") IsNot Nothing, dt.Rows(i)("txtDebit"), DBNull.Value))
cmd.Parameters.AddWithValue("@Cr", If(dt.Rows(i)("txtCredit") IsNot Nothing, dt.Rows(i)("txtCredit"), DBNull.Value))
cmd.Parameters.AddWithValue("@Date", DateTime.Now)
cmd.Connection = con
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
Next
End Sub
Private Sub SetInitialRow()
Dim dt As DataTable = New DataTable()
dt.Columns.Add(New DataColumn("RowNumber", GetType(String)))
dt.Columns.Add(New DataColumn("txtcode", GetType(String)))
dt.Columns.Add(New DataColumn("ddlfourdr", GetType(String)))
dt.Columns.Add(New DataColumn("txtDebit", GetType(String)))
dt.Columns.Add(New DataColumn("txtCredit", GetType(String)))
dt.Columns.Add(New DataColumn("ddltype", GetType(String)))
Dim dr As DataRow = dt.NewRow()
dr("RowNumber") = 1
dr("txtcode") = String.Empty
dr("txtDebit") = String.Empty
dr("txtCredit") = String.Empty
dt.Rows.Add(dr)
ViewState("CurrentTable") = dt
gvtrans.DataSource = dt
gvtrans.DataBind()
End Sub
Private Sub SetPreviousData()
Dim rowIndex As Integer = 0
If ViewState("CurrentTable") IsNot Nothing Then
Dim dt As DataTable = CType(ViewState("CurrentTable"), DataTable)
If dt.Rows.Count > 0 Then
For i As Integer = 0 To dt.Rows.Count - 1
Dim box1 As TextBox = CType(gvtrans.Rows(rowIndex).Cells(0).FindControl("txtcode"), TextBox)
Dim box2 As DropDownList = CType(gvtrans.Rows(rowIndex).Cells(1).FindControl("ddlfourdr"), DropDownList)
Dim box3 As TextBox = CType(gvtrans.Rows(rowIndex).Cells(2).FindControl("txtDebit"), TextBox)
Dim box4 As TextBox = CType(gvtrans.Rows(rowIndex).Cells(3).FindControl("txtCredit"), TextBox)
box1.Text = dt.Rows(i)("txtcode").ToString()
box2.Text = dt.Rows(i)("ddlfourdr").ToString()
box3.Text = dt.Rows(i)("txtDebit").ToString()
box4.Text = dt.Rows(i)("txtCredit").ToString()
rowIndex += 1
Next
End If
End If
End Sub