Waghmare says:
var ddlIdType = (DropDownList)e.Row.FindControl(
"drpID_Type"
);
SqlCommand cmd =
new
SqlCommand(
"Select * from MstBooking_Mode"
, hmcon);
SqlDataAdapter da =
new
SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds =
new
DataSet();
da.Fill(ds);
ddlIdType.DataSource = ds;
ddlIdType.DataTextField =
"Description"
;
ddlIdType.DataValueField =
"ID"
;
ddlIdType.DataBind();
ddlIdType.Items.Insert(0,
new
ListItem(
"Please Select"
));
Change with the below code.
if (e.Row.RowType == DataControlRowType.Footer)
{
DropDownList ddlIdType = (DropDownList)e.Row.FindControl("drpID_Type");
SqlCommand cmd = new SqlCommand("Select * from MstBooking_Mode", hmcon);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
ddlIdType.DataSource = ds;
ddlIdType.DataTextField = "Description";
ddlIdType.DataValueField = "ID";
ddlIdType.DataBind();
ddlIdType.Items.Insert(0, new ListItem("Please Select"));
}
Also refer the below sample.
HTML
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" ShowFooter="true"
OnRowDataBound="OnRowDataBound">
<Columns>
<asp:TemplateField HeaderText="Id">
<ItemTemplate>
<asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>' />
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtName" runat="server" Text="Test Name" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Country">
<ItemTemplate>
<asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>' />
</ItemTemplate>
<FooterTemplate>
<%--<asp:TextBox ID="txtCountry" runat="server" Text="Test Country" />--%>
<asp:DropDownList ID="ddlCountry" runat="server">
</asp:DropDownList>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action">
<ItemTemplate>
<asp:Button Text="Delete" runat="server" OnClick="Delete" CommandArgument='<%# Eval("Id") %>'
Width="75px" />
</ItemTemplate>
<FooterTemplate>
<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="Add" Width="75px" CommandName="Footer" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
<table>
<tr>
<th scope="col">
Id
</th>
<th scope="col">
Name
</th>
<th scope="col">
Country
</th>
<th scope="col">
Action
</th>
</tr>
<tr>
<td>
</td>
<td>
<asp:TextBox ID="txtName" runat="server" Text="Test Country" />
</td>
<td>
<%--<asp:TextBox ID="txtCountry" runat="server" Text="Test Country" />--%>
<asp:DropDownList ID="ddlCountry" runat="server">
</asp:DropDownList>
</td>
<td>
<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="Add" Width="75px" CommandName="EmptyDataTemplate" />
</td>
</tr>
</table>
</EmptyDataTemplate>
</asp:GridView>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id"), new DataColumn("Name"), new DataColumn("Country") });
dt.Rows.Add(1, "John Hammond", "USA");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "UK");
GridView1.DataSource = dt;
GridView1.DataBind();
ViewState["Data"] = dt;
}
}
protected void Add(object sender, EventArgs e)
{
Control control = null;
if (GridView1.FooterRow != null)
{
control = GridView1.FooterRow;
}
else
{
control = GridView1.Controls[0].Controls[0];
}
string name = (control.FindControl("txtName") as TextBox).Text.Trim();
string country = (control.FindControl("ddlCountry") as DropDownList).SelectedItem.Text.Trim();
if (country.ToLower() == "please select")
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert('Select country to add')", true);
}
else
{
DataTable dt = ViewState["Data"] as DataTable;
int lastId;
if (dt.Rows.Count == 0)
{
lastId = 1;
dt.Rows.Add(lastId, name, country);
}
else
{
lastId = Convert.ToInt32(dt.Rows[dt.Rows.Count - 1]["Id"].ToString());
dt.Rows.Add(lastId + 1, name, country);
}
GridView1.DataSource = dt;
GridView1.DataBind();
ViewState["Data"] = dt;
}
}
protected void Delete(object sender, EventArgs e)
{
string id = ((sender as Button)).CommandArgument;
DataTable dt = ViewState["Data"] as DataTable;
DataRow dr = dt.Select("Id=" + id)[0];
dt.Rows.Remove(dr);
GridView1.DataSource = dt;
GridView1.DataBind();
ViewState["Data"] = dt;
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Id"), new DataColumn("Name") });
dt.Rows.Add(1, "India");
dt.Rows.Add(2, "USA");
dt.Rows.Add(3, "Canada");
dt.Rows.Add(4, "Brazil");
DropDownList ddlIdType = new DropDownList();
if (e.Row.RowType == DataControlRowType.Footer)
{
ddlIdType = (DropDownList)e.Row.FindControl("ddlCountry");
}
if (e.Row.RowType == DataControlRowType.EmptyDataRow)
{
ddlIdType = (DropDownList)e.Row.FindControl("ddlCountry");
}
ddlIdType.DataSource = dt;
ddlIdType.DataTextField = "Name";
ddlIdType.DataValueField = "Id";
ddlIdType.DataBind();
ddlIdType.Items.Insert(0, new ListItem("Please Select"));
}
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id"), New DataColumn("Name"), New DataColumn("Country")})
dt.Rows.Add(1, "John Hammond", "USA")
dt.Rows.Add(2, "Mudassar Khan", "India")
dt.Rows.Add(3, "Suzanne Mathews", "France")
dt.Rows.Add(4, "Robert Schidner", "UK")
GridView1.DataSource = dt
GridView1.DataBind()
ViewState("Data") = dt
End If
End Sub
Protected Sub Add(sender As Object, e As EventArgs)
Dim control As Control = Nothing
If GridView1.FooterRow IsNot Nothing Then
control = GridView1.FooterRow
Else
control = GridView1.Controls(0).Controls(0)
End If
Dim name As String = TryCast(control.FindControl("txtName"), TextBox).Text.Trim()
Dim country As String = TryCast(control.FindControl("ddlCountry"), DropDownList).SelectedItem.Text.Trim()
If country.ToLower() = "please select" Then
ClientScript.RegisterClientScriptBlock(Me.[GetType](), "", "alert('Select country to add')", True)
Else
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
Dim lastId As Integer
If dt.Rows.Count = 0 Then
lastId = 1
dt.Rows.Add(lastId, name, country)
Else
lastId = Convert.ToInt32(dt.Rows(dt.Rows.Count - 1)("Id").ToString())
dt.Rows.Add(lastId + 1, name, country)
End If
GridView1.DataSource = dt
GridView1.DataBind()
ViewState("Data") = dt
End If
End Sub
Protected Sub Delete(sender As Object, e As EventArgs)
Dim id As String = TryCast(sender, Button).CommandArgument
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
Dim dr As DataRow = dt.[Select](Convert.ToString("Id=") & id)(0)
dt.Rows.Remove(dr)
GridView1.DataSource = dt
GridView1.DataBind()
ViewState("Data") = dt
End Sub
Protected Sub OnRowDataBound(sender As Object, e As GridViewRowEventArgs)
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn(1) {New DataColumn("Id"), New DataColumn("Name")})
dt.Rows.Add(1, "India")
dt.Rows.Add(2, "USA")
dt.Rows.Add(3, "Canada")
dt.Rows.Add(4, "Brazil")
Dim ddlIdType As New DropDownList()
If e.Row.RowType = DataControlRowType.Footer Then
ddlIdType = DirectCast(e.Row.FindControl("ddlCountry"), DropDownList)
End If
If e.Row.RowType = DataControlRowType.EmptyDataRow Then
ddlIdType = DirectCast(e.Row.FindControl("ddlCountry"), DropDownList)
End If
ddlIdType.DataSource = dt
ddlIdType.DataTextField = "Name"
ddlIdType.DataValueField = "Id"
ddlIdType.DataBind()
ddlIdType.Items.Insert(0, New ListItem("Please Select"))
End Sub
Screeenshot
