Hi careless,
Check this example. Now please take its reference and correct your code.
HTML
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<div class="row">
<div class="col-md-2">
<asp:Label ID="Label1" runat="server" Text="Name"></asp:Label>
</div>
<div class="col-md-2">
<asp:Label ID="Label2" runat="server" Text="Email"></asp:Label>
</div>
<div class="col-md-2">
<asp:Label ID="Label3" runat="server" Text="Mobile"></asp:Label>
</div>
</div>
</HeaderTemplate>
<ItemTemplate>
<div class="row">
<div class="col-md-2">
<asp:TextBox ID="txtname" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="col-md-2">
<asp:TextBox ID="txtemail" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="col-md-2">
<asp:TextBox ID="txtmobile" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="col-sm-1">
<asp:LinkButton ID="btnadd" runat="server" Text="+" CssClass="btn btn-success" OnClick="btnadd_Click"></asp:LinkButton>
</div>
<div class="col-sm-1" style="float: left">
<asp:LinkButton ID="btndel" runat="server" Text="-" CssClass="btn btn-danger left"
OnClick="btndel_Click"></asp:LinkButton>
</div>
</div>
<br />
</ItemTemplate>
</asp:Repeater>
Namespaces
C#
using System.Data;
VB.Net
Imports System.Data
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindRepeater();
}
}
protected void btnadd_Click(object sender, EventArgs e)
{
int rowIndex = 0;
if (ViewState["Curtbl"] != null)
{
DataTable dt = (DataTable)ViewState["Curtbl"];
DataRow drCurrentRow = null;
if (dt.Rows.Count > 0)
{
for (int i = 1; i <= dt.Rows.Count; i++)
{
TextBox txtname = (TextBox)Repeater1.Items[rowIndex].FindControl("txtname");
TextBox txtemail = (TextBox)Repeater1.Items[rowIndex].FindControl("txtemail");
TextBox txtmobile = (TextBox)Repeater1.Items[rowIndex].FindControl("txtmobile");
drCurrentRow = dt.NewRow();
dt.Rows[i - 1]["txtname"] = txtname.Text;
dt.Rows[i - 1]["txtemail"] = txtemail.Text;
dt.Rows[i - 1]["txtmobile"] = txtmobile.Text;
rowIndex++;
}
dt.Rows.Add(drCurrentRow);
ViewState["Curtbl"] = dt;
Repeater1.DataSource = dt;
Repeater1.DataBind();
}
}
else
{
Response.Write("ViewState Value is Null");
}
SetOldData();
}
protected void btndel_Click(object sender, EventArgs e)
{
RepeaterItem item = (sender as LinkButton).NamingContainer as RepeaterItem;
int rowIndex = 0;
int rowID = item.ItemIndex;
if (ViewState["Curtbl"] != null)
{
DataTable dt = (DataTable)ViewState["Curtbl"];
if (dt.Rows.Count > 0)
{
for (int i = 1; i <= Repeater1.Items.Count; i++)
{
TextBox txtname = (TextBox)Repeater1.Items[rowIndex].FindControl("txtname");
TextBox txtemail = (TextBox)Repeater1.Items[rowIndex].FindControl("txtemail");
TextBox txtmobile = (TextBox)Repeater1.Items[rowIndex].FindControl("txtmobile");
dt.Rows[i - 1]["txtname"] = txtname.Text;
dt.Rows[i - 1]["txtemail"] = txtemail.Text;
dt.Rows[i - 1]["txtmobile"] = txtmobile.Text;
rowIndex++;
}
if (item.ItemIndex < dt.Rows.Count - 1)
{
dt.Rows.Remove(dt.Rows[rowID]);
}
}
ViewState["Curtbl"] = dt;
Repeater1.DataSource = dt;
Repeater1.DataBind();
}
SetOldData();
}
protected void BindRepeater()
{
DataTable dt = new DataTable();
dt.Columns.Add("txtname", typeof(string));
dt.Columns.Add("txtemail", typeof(string));
dt.Columns.Add("txtmobile", typeof(string));
DataRow dr = dt.NewRow();
dr["txtname"] = string.Empty;
dr["txtemail"] = string.Empty;
dr["txtmobile"] = string.Empty;
dt.Rows.Add(dr);
ViewState["Curtbl"] = dt;
Repeater1.DataSource = dt;
Repeater1.DataBind();
}
private void SetOldData()
{
int rowIndex = 0;
if (ViewState["Curtbl"] != null)
{
DataTable dt = (DataTable)ViewState["Curtbl"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
TextBox txtname = (TextBox)Repeater1.Items[rowIndex].FindControl("txtname");
TextBox txtemail = (TextBox)Repeater1.Items[rowIndex].FindControl("txtemail");
TextBox txtmobile = (TextBox)Repeater1.Items[rowIndex].FindControl("txtmobile");
txtname.Text = dt.Rows[i]["txtname"].ToString();
txtemail.Text = dt.Rows[i]["txtemail"].ToString();
txtmobile.Text = dt.Rows[i]["txtmobile"].ToString();
rowIndex++;
}
}
}
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not IsPostBack Then
BindRepeater()
End If
End Sub
Protected Sub btnadd_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim rowIndex As Integer = 0
If ViewState("Curtbl") IsNot Nothing Then
Dim dt As DataTable = CType(ViewState("Curtbl"), DataTable)
Dim drCurrentRow As DataRow = Nothing
If dt.Rows.Count > 0 Then
For i As Integer = 1 To dt.Rows.Count
Dim txtname As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtname"), TextBox)
Dim txtemail As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtemail"), TextBox)
Dim txtmobile As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtmobile"), TextBox)
drCurrentRow = dt.NewRow()
dt.Rows(i - 1)("txtname") = txtname.Text
dt.Rows(i - 1)("txtemail") = txtemail.Text
dt.Rows(i - 1)("txtmobile") = txtmobile.Text
rowIndex += 1
Next
dt.Rows.Add(drCurrentRow)
ViewState("Curtbl") = dt
Repeater1.DataSource = dt
Repeater1.DataBind()
End If
Else
Response.Write("ViewState Value is Null")
End If
SetOldData()
End Sub
Protected Sub btndel_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim item As RepeaterItem = TryCast((TryCast(sender, LinkButton)).NamingContainer, RepeaterItem)
Dim rowIndex As Integer = 0
Dim rowID As Integer = item.ItemIndex
If ViewState("Curtbl") IsNot Nothing Then
Dim dt As DataTable = CType(ViewState("Curtbl"), DataTable)
If dt.Rows.Count > 0 Then
For i As Integer = 1 To Repeater1.Items.Count
Dim txtname As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtname"), TextBox)
Dim txtemail As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtemail"), TextBox)
Dim txtmobile As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtmobile"), TextBox)
dt.Rows(i - 1)("txtname") = txtname.Text
dt.Rows(i - 1)("txtemail") = txtemail.Text
dt.Rows(i - 1)("txtmobile") = txtmobile.Text
rowIndex += 1
Next
If item.ItemIndex < dt.Rows.Count - 1 Then
dt.Rows.Remove(dt.Rows(rowID))
End If
End If
ViewState("Curtbl") = dt
Repeater1.DataSource = dt
Repeater1.DataBind()
End If
SetOldData()
End Sub
Protected Sub BindRepeater()
Dim dt As DataTable = New DataTable()
dt.Columns.Add("txtname", GetType(String))
dt.Columns.Add("txtemail", GetType(String))
dt.Columns.Add("txtmobile", GetType(String))
Dim dr As DataRow = dt.NewRow()
dr("txtname") = String.Empty
dr("txtemail") = String.Empty
dr("txtmobile") = String.Empty
dt.Rows.Add(dr)
ViewState("Curtbl") = dt
Repeater1.DataSource = dt
Repeater1.DataBind()
End Sub
Private Sub SetOldData()
Dim rowIndex As Integer = 0
If ViewState("Curtbl") IsNot Nothing Then
Dim dt As DataTable = CType(ViewState("Curtbl"), DataTable)
If dt.Rows.Count > 0 Then
For i As Integer = 0 To dt.Rows.Count - 1
Dim txtname As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtname"), TextBox)
Dim txtemail As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtemail"), TextBox)
Dim txtmobile As TextBox = CType(Repeater1.Items(rowIndex).FindControl("txtmobile"), TextBox)
txtname.Text = dt.Rows(i)("txtname").ToString()
txtemail.Text = dt.Rows(i)("txtemail").ToString()
txtmobile.Text = dt.Rows(i)("txtmobile").ToString()
rowIndex += 1
Next
End If
End If
End Sub
Screenshot