Here I have created sample that full-fill you requirement.
C#
private void Form1_Load(object sender, EventArgs e)
{
cmbState.Enabled = false;
cmbCity.Enabled = false;
string strQuery = "select CountryId, CountryName from Countries";
cmbCountry.ValueMember = "CountryId";
cmbCountry.DisplayMember = "CountryName";
cmbCountry.DataSource = GetData(strQuery, null).Tables[0];
}
private void cmbCountry_SelectedIndexChanged(object sender, EventArgs e)
{
string strQuery = "select StateId, StateName from States where CountryID=@CountryID";
SqlParameter[] sqlParameter = new SqlParameter[1];
sqlParameter[0] = new SqlParameter("@CountryID", cmbCountry.SelectedValue);
cmbState.Enabled = true;
cmbState.DisplayMember = "StateName";
cmbState.ValueMember = "StateId";
cmbState.DataSource = this.GetData(strQuery, sqlParameter).Tables[0];
}
private void cmdState_SelectedIndexChanged(object sender, EventArgs e)
{
string strQuery = "SELECT CityId, CityName FROM Cities WHERE StateId=@StateId";
SqlParameter[] sqlParameter = new SqlParameter[1];
sqlParameter[0] = new SqlParameter("@StateId", cmbState.SelectedValue);
cmbCity.Enabled = true;
cmbCity.DisplayMember = "CityName";
cmbCity.ValueMember = "CityId";
cmbCity.DataSource = this.GetData(strQuery, sqlParameter).Tables[0];
}
private DataSet GetData(string query, SqlParameter[] sqlParameter)
{
string strConnString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
SqlConnection con = new SqlConnection(strConnString);
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(query, con);
if (sqlParameter != null)
{
cmd.Parameters.AddRange(sqlParameter);
}
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
return ds;
}
Screenshot