Ref: How to bind data to a DropDownList which is inside a GridView in ASP.Net
HTML:
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" />
<asp:TemplateField HeaderText="Country">
<ItemTemplate>
<asp:Label ID="lblCity" runat="server" Text='<%# Eval("City") %>' Visible="false" />
<asp:DropDownList ID="ddlCities" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<asp:Button Text="Update" OnClick="Update" runat="server" />
</form>
C#:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = GetData("SELECT * FROM Cities");
GridView1.DataBind();
}
}
private DataSet GetData(string query)
{
string conString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
SqlCommand cmd = new SqlCommand(query);
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
sda.Fill(ds);
return ds;
}
}
}
}
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//Find the DropDownList in the Row
DropDownList ddlCities = (e.Row.FindControl("ddlCities") as DropDownList);
ddlCities.DataSource = GetData("SELECT DISTINCT City FROM Cities");
ddlCities.DataTextField = "City";
ddlCities.DataValueField = "City";
ddlCities.DataBind();
//Add Default Item in the DropDownList
ddlCities.Items.Insert(0, new ListItem("Please select"));
//Select the Country of Customer in DropDownList
string city = (e.Row.FindControl("lblCity") as Label).Text;
ddlCities.Items.FindByValue(city).Selected = true;
}
}
protected void Update(object sender, EventArgs e)
{
foreach (GridViewRow row in this.GridView1.Rows)
{
int id = Convert.ToInt32(row.Cells[0].Text);
string city = (row.FindControl("ddlCities") as DropDownList).SelectedItem.Value;
UpdateRecord(id, city);
}
}
private void UpdateRecord(int id, string city)
{
string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
string sqlStatment = "UPDATE Cities SET City = @City WHERE Id = @id";
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(sqlStatment, con))
{
con.Open();
cmd.Parameters.AddWithValue("@Id", id);
cmd.Parameters.AddWithValue("@city", city);
cmd.ExecuteNonQuery();
con.Close();
}
}
}
NameSpace:
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
SQL:
CREATE TABLE [dbo].[Cities](
[Id] [int] IDENTITY(1,1) NOT NULL,
[City] [varchar](50) NOT NULL,
CONSTRAINT [PK_Cities] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Image:
