Check this example. Now please take its reference and correct your code as per your requirement.
HTML
<div>
<asp:CheckBoxList runat="server" ID="cblColumnName">
<asp:ListItem Text="Name" Value="Name" />
<asp:ListItem Text="Type" Value="Type" />
</asp:CheckBoxList>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server">
<div class="container">
<div class="row">
<div class="col-md-2">
<div class="spacer">
<asp:LinkButton runat="server" CssClass="btn btn-danger" ID="lnkLoad" OnClick="lnkLoad_Click">Load</asp:LinkButton>
</div>
</div>
<div class="col-md-10">
<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="true" OnRowDataBound="OnRowDataBound"
CssClass="table table-hover table-bordered" EmptyDataText="No Items Available"
OnRowEditing="OnRowEditing">
<Columns>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="OnUpdate"><span class="fa fa-check-square-o"></span></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" OnClick="OnCancel"><span class="fa fa-window-close"></span></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton3" runat="server" CommandName="Edit"><span class="fa fa-pencil-square-o"></span></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</div>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<br />
<asp:Button Text="Delete Name Column" runat="server" OnClick="DeleteNameColumn" />
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.Page.IsPostBack)
{
try
{
this.BindGrid();
}
catch (Exception ex)
{
string message = "alert('" + ex.Message.ToString() + "');";
ScriptManager.RegisterStartupScript(sender as Control, this.GetType(), "alert", message, true);
}
}
}
protected void BindGrid()
{
this.GridView1.DataSource = (DataTable)Session["GridView1"];
this.GridView1.DataBind();
}
private DropDownList TypesCombobox()
{
DropDownList DownList = new DropDownList();
DownList.Items.Add(new ListItem("TextBox", "TextBox"));
DownList.Items.Add(new ListItem("ComBobox", "Combobox"));
return DownList;
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drv = (DataRowView)e.Row.DataItem;
if (drv.Row.Table.Columns.Contains("Type") && this.GridView1.EditIndex == e.Row.RowIndex)
{
string TypeValue = drv["Type"].ToString();
int index = drv.Row.Table.Columns["Type"].Ordinal + 1;
DropDownList dropDownList = this.TypesCombobox();
dropDownList.ID = "ddlTypesControl" + drv.Row.Table.Columns["Type"].Ordinal.ToString();
TableCell CellItem = e.Row.Cells[index] as TableCell;
if (!string.IsNullOrEmpty(TypeValue))
{
dropDownList.Items.FindByValue(TypeValue).Selected = true;
}
CellItem.Controls.Remove(CellItem.Controls[0] as TextBox);
CellItem.Controls.Add(dropDownList);
}
}
}
protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView1.EditIndex = e.NewEditIndex;
this.BindGrid();
}
protected void OnUpdate(object sender, EventArgs e)
{
try
{
GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
DataTable dt = (DataTable)Session["GridView1"];
for (int i = 0; i < row.Cells.Count - 1; i++)
{
string values = string.Empty;
if (dt.Columns[i].ToString() != "Type")
{
values = (row.Cells[i + 1].Controls[0] as TextBox).Text;
}
else
{
values = (row.Cells[i + 1].Controls[0] as DropDownList).SelectedValue.ToString(); ;
}
dt.Rows[row.RowIndex][dt.Columns[i]] = values;
}
Session["GridView1"] = dt;
this.GridView1.EditIndex = -1;
this.BindGrid();
}
catch (Exception ex)
{
string message = "alert('" + ex.Message.ToString() + "');";
ScriptManager.RegisterStartupScript(sender as Control, this.GetType(), "alert", message, true);
}
}
protected void OnCancel(object sender, EventArgs e)
{
this.GridView1.EditIndex = -1;
this.BindGrid();
}
protected void lnkLoad_Click(object sender, EventArgs e)
{
this.gettable();
DataTable dt = GetDataTable();
var lbData = new List<ListItem>();
foreach (DataColumn cloumn in dt.Columns)
{
lbData.Add(new ListItem(cloumn.ColumnName, cloumn.ColumnName));
}
cblColumnName.DataSource = lbData;
cblColumnName.DataTextField = "Text";
cblColumnName.DataValueField = "Text";
cblColumnName.DataBind();
}
private void gettable()
{
try
{
DataTable dt = GetDataTable();
Session["GridView1"] = dt;
this.BindGrid();
}
catch (Exception ex)
{
string message = "alert('" + ex.Message.ToString() + "');";
ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", message, true);
}
}
private DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Type", typeof(string)));
dt.Rows.Add("NameTest1", "TextBox");
dt.Rows.Add("NameTest2", "Combobox");
dt.Rows.Add("NameTest3", "Combobox");
dt.Rows.Add("NameTest4", "TextBox");
dt.Rows.Add("NameTest5", "TextBox");
return dt;
}
protected void DeleteNameColumn(object sender, EventArgs e)
{
DataTable dt = (DataTable)Session["GridView1"];
for (int i = 0; i < cblColumnName.Items.Count; i++)
{
if (cblColumnName.Items[i].Selected)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
if (dt.Columns[j].ColumnName.ToUpper() == cblColumnName.Items[i].Text.ToUpper())
{
dt.Columns.Remove(cblColumnName.Items[i].Text);
}
}
}
}
dt.AcceptChanges();
Session["GridView1"] = dt;
this.BindGrid();
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.Page.IsPostBack Then
Try
Me.BindGrid()
Catch ex As Exception
Dim message As String = "alert('" & ex.Message.ToString() & "');"
ScriptManager.RegisterStartupScript(TryCast(sender, Control), Me.[GetType](), "alert", message, True)
End Try
End If
End Sub
Protected Sub BindGrid()
Me.GridView1.DataSource = CType(Session("GridView1"), DataTable)
Me.GridView1.DataBind()
End Sub
Private Function TypesCombobox() As DropDownList
Dim DownList As DropDownList = New DropDownList()
DownList.Items.Add(New ListItem("TextBox", "TextBox"))
DownList.Items.Add(New ListItem("ComBobox", "Combobox"))
Return DownList
End Function
Protected Sub OnRowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim drv As DataRowView = CType(e.Row.DataItem, DataRowView)
If drv.Row.Table.Columns.Contains("Type") AndAlso Me.GridView1.EditIndex = e.Row.RowIndex Then
Dim TypeValue As String = drv("Type").ToString()
Dim index As Integer = drv.Row.Table.Columns("Type").Ordinal + 1
Dim dropDownList As DropDownList = Me.TypesCombobox()
dropDownList.ID = "ddlTypesControl" & drv.Row.Table.Columns("Type").Ordinal.ToString()
Dim CellItem As TableCell = TryCast(e.Row.Cells(index), TableCell)
If Not String.IsNullOrEmpty(TypeValue) Then
dropDownList.Items.FindByValue(TypeValue).Selected = True
End If
CellItem.Controls.Remove(TryCast(CellItem.Controls(0), TextBox))
CellItem.Controls.Add(dropDownList)
End If
End If
End Sub
Protected Sub OnRowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
Me.GridView1.EditIndex = e.NewEditIndex
Me.BindGrid()
End Sub
Protected Sub OnUpdate(ByVal sender As Object, ByVal e As EventArgs)
Try
Dim row As GridViewRow = TryCast((TryCast(sender, LinkButton)).NamingContainer, GridViewRow)
Dim dt As DataTable = CType(Session("GridView1"), DataTable)
For i As Integer = 0 To row.Cells.Count - 1 - 1
Dim values As String = String.Empty
If dt.Columns(i).ToString() <> "Type" Then
values =(TryCast(row.Cells(i + 1).Controls(0), TextBox)).Text
Else
values =(TryCast(row.Cells(i + 1).Controls(0), DropDownList)).SelectedValue.ToString()
End If
dt.Rows(row.RowIndex)(dt.Columns(i)) = values
Next
Session("GridView1") = dt
Me.GridView1.EditIndex = -1
Me.BindGrid()
Catch ex As Exception
Dim message As String = "alert('" & ex.Message.ToString() & "');"
ScriptManager.RegisterStartupScript(TryCast(sender, Control), Me.[GetType](), "alert", message, True)
End Try
End Sub
Protected Sub OnCancel(ByVal sender As Object, ByVal e As EventArgs)
Me.GridView1.EditIndex = -1
Me.BindGrid()
End Sub
Protected Sub lnkLoad_Click(ByVal sender As Object, ByVal e As EventArgs)
Me.gettable()
Dim dt As DataTable = GetDataTable()
Dim lbData = New List(Of ListItem)()
For Each cloumn As DataColumn In dt.Columns
lbData.Add(New ListItem(cloumn.ColumnName, cloumn.ColumnName))
Next
cblColumnName.DataSource = lbData
cblColumnName.DataTextField = "Text"
cblColumnName.DataValueField = "Text"
cblColumnName.DataBind()
End Sub
Private Sub gettable()
Try
Dim dt As DataTable = GetDataTable()
Session("GridView1") = dt
Me.BindGrid()
Catch ex As Exception
Dim message As String = "alert('" & ex.Message.ToString() & "');"
ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "alert", message, True)
End Try
End Sub
Private Function GetDataTable() As DataTable
Dim dt As DataTable = New DataTable()
dt.Columns.Add(New DataColumn("Name", GetType(String)))
dt.Columns.Add(New DataColumn("Type", GetType(String)))
dt.Rows.Add("NameTest1", "TextBox")
dt.Rows.Add("NameTest2", "Combobox")
dt.Rows.Add("NameTest3", "Combobox")
dt.Rows.Add("NameTest4", "TextBox")
dt.Rows.Add("NameTest5", "TextBox")
Return dt
End Function
Protected Sub DeleteNameColumn(ByVal sender As Object, ByVal e As EventArgs)
Dim dt As DataTable = CType(Session("GridView1"), DataTable)
For i As Integer = 0 To cblColumnName.Items.Count - 1
If cblColumnName.Items(i).Selected Then
For j As Integer = 0 To dt.Columns.Count - 1
If dt.Columns(j).ColumnName.ToUpper() = cblColumnName.Items(i).Text.ToUpper() Then
dt.Columns.Remove(cblColumnName.Items(i).Text)
End If
Next
End If
Next
dt.AcceptChanges()
Session("GridView1") = dt
Me.BindGrid()
End Sub
Screenshot
