Hi swathiyemp,
Refer below sample.
HTML
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" />
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<script type="text/javascript">
$(function () {
selectlistBox();
});
function selectlistBox() {
$('[id*=ddlCountries]').select2({
placeholder: "Select",
allowClear: true
});
$('[id*=ddlStates]').select2({
placeholder: "Select",
allowClear: true
});
$('[id*=ddlCities]').select2({
placeholder: "Select",
allowClear: true
});
}
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm != null) {
prm.add_endRequest(function (sender, e) {
if (sender._postBackSettings.panelsToUpdate != null) {
selectlistBox();
}
});
};
</script>
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
Country:
<asp:ListBox ID="ddlCountries" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Country_Changed"
SelectionMode="Multiple"></asp:ListBox>
<br />
<br />
State:
<asp:ListBox ID="ddlStates" runat="server" AutoPostBack="true" OnSelectedIndexChanged="State_Changed"
SelectionMode="Multiple"></asp:ListBox>
<br />
<br />
City:
<asp:ListBox ID="ddlCities" runat="server" SelectionMode="Multiple"></asp:ListBox>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<asp:Button ID="Button1" Text="Submit" runat="server" OnClick="Submit"></asp:Button>
<br />
<asp:GridView ID="gvStateData" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" />
<asp:BoundField DataField="StateName" HeaderText="StateName" />
<asp:BoundField DataField="CountryId" HeaderText="CountryId" />
</Columns>
</asp:GridView>
<br />
<asp:GridView ID="gvCountryData" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="CountryId" HeaderText="CountryId" />
<asp:BoundField DataField="CountryName" HeaderText="CountryName" />
</Columns>
</asp:GridView>
</div>
Namespaces
C#
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
VB.Net
Imports System.Data.SqlClient
Imports System.Data
Code
C#
private void BindListBox(ListBox ddl, string query, string text, string value, string defaultText)
{
string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
SqlCommand cmd = new SqlCommand(query);
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
con.Open();
ddl.DataSource = cmd.ExecuteReader();
ddl.DataTextField = text;
ddl.DataValueField = value;
ddl.DataBind();
con.Close();
}
}
ddl.Items.Insert(0, new ListItem(defaultText, "0"));
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string query = "select CountryId, CountryName from Countries";
BindListBox(ddlCountries, query, "CountryName", "CountryId", "Select Country");
ddlStates.Enabled = false;
ddlCities.Enabled = false;
ddlStates.Items.Insert(0, new ListItem("Select State", "0"));
ddlCities.Items.Insert(0, new ListItem("Select City", "0"));
}
}
protected void Country_Changed(object sender, EventArgs e)
{
ddlStates.Enabled = false;
ddlCities.Enabled = false;
ddlStates.Items.Clear();
ddlCities.Items.Clear();
ddlStates.Items.Insert(0, new ListItem("Select State", "0"));
ddlCities.Items.Insert(0, new ListItem("Select City", "0"));
string selectedCountry = "";
int selectedCount = 0;
foreach (ListItem item in ddlCountries.Items)
{
if (item.Selected)
{
selectedCount++;
selectedCountry += item.Value + ",";
}
}
if (selectedCount > 0)
{
string query = string.Format("select StateId, StateName from States where CountryId IN ({0})", selectedCountry.TrimEnd(','));
BindListBox(ddlStates, query, "StateName", "StateId", "Select State");
ddlStates.Enabled = true;
}
}
protected void State_Changed(object sender, EventArgs e)
{
ddlCities.Enabled = false;
ddlCities.Items.Clear();
ddlCities.Items.Insert(0, new ListItem("Select City", "0"));
string selectedState = "";
int selectedCount = 0;
foreach (ListItem item in ddlStates.Items)
{
if (item.Selected)
{
selectedCount++;
selectedState += item.Value + ",";
}
}
if (selectedCount > 0)
{
string query = string.Format("select CityId, CityName from Cities where StateId IN ({0})", selectedState.TrimEnd(','));
BindListBox(ddlCities, query, "CityName", "CityId", "Select City");
ddlCities.Enabled = true;
}
}
protected void Submit(object sender, EventArgs e)
{
SqlConnection con = null;
SqlCommand cmd = null;
string id = "";
string stateName = "";
foreach (ListItem item in ddlCountries.Items)
{
if (item.Selected)
{
id += item.Value;
con = new SqlConnection(constr);
cmd = new SqlCommand("INSERT INTO TestCountryData VALUES(@CountryName,@CountryId)", con);
cmd.Parameters.AddWithValue("@CountryName", item.Text);
cmd.Parameters.AddWithValue("@CountryId", id);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
foreach (ListItem item in ddlStates.Items)
{
if (item.Selected)
{
stateName += item.Text + " ";
}
}
foreach (var item in stateName.Split(' '))
{
if (!string.IsNullOrEmpty(item))
{
con = new SqlConnection(constr);
cmd = new SqlCommand("INSERT INTO TestStateData VALUES(@StateName,@CountryId)", con);
cmd.Parameters.AddWithValue("@StateName", item);
cmd.Parameters.AddWithValue("@CountryId", id);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
cmd = new SqlCommand("SELECT * FROM TestStateData", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
cmd = new SqlCommand("SELECT * FROM TestCountryData", con);
SqlDataAdapter da1 = new SqlDataAdapter(cmd);
DataTable dt1 = new DataTable();
da1.Fill(dt1);
this.gvStateData.DataSource = dt;
this.gvStateData.DataBind();
this.gvCountryData.DataSource = dt1;
this.gvCountryData.DataBind();
}
}
}
VB.Net
Private Sub BindListBox(ByVal ddl As ListBox, ByVal query As String, ByVal text As String, ByVal value As String, ByVal defaultText As String)
Dim conString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Dim cmd As SqlCommand = New SqlCommand(query)
Using con As SqlConnection = New SqlConnection(conString)
Using sda As SqlDataAdapter = New SqlDataAdapter()
cmd.Connection = con
con.Open()
ddl.DataSource = cmd.ExecuteReader()
ddl.DataTextField = text
ddl.DataValueField = value
ddl.DataBind()
con.Close()
End Using
End Using
ddl.Items.Insert(0, New ListItem(defaultText, "0"))
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim query As String = "select CountryId, CountryName from Countries"
BindListBox(ddlCountries, query, "CountryName", "CountryId", "Select Country")
ddlStates.Enabled = False
ddlCities.Enabled = False
ddlStates.Items.Insert(0, New ListItem("Select State", "0"))
ddlCities.Items.Insert(0, New ListItem("Select City", "0"))
End If
End Sub
Protected Sub Country_Changed(ByVal sender As Object, ByVal e As EventArgs)
ddlStates.Enabled = False
ddlCities.Enabled = False
ddlStates.Items.Clear()
ddlCities.Items.Clear()
ddlStates.Items.Insert(0, New ListItem("Select State", "0"))
ddlCities.Items.Insert(0, New ListItem("Select City", "0"))
Dim selectedCountry As String = ""
Dim selectedCount As Integer = 0
For Each item As ListItem In ddlCountries.Items
If item.Selected Then
selectedCount += 1
selectedCountry += item.Value & ","
End If
Next
If selectedCount > 0 Then
Dim query As String = String.Format("select StateId, StateName from States where CountryId IN ({0})", selectedCountry.TrimEnd(","c))
BindListBox(ddlStates, query, "StateName", "StateId", "Select State")
ddlStates.Enabled = True
End If
End Sub
Protected Sub State_Changed(ByVal sender As Object, ByVal e As EventArgs)
ddlCities.Enabled = False
ddlCities.Items.Clear()
ddlCities.Items.Insert(0, New ListItem("Select City", "0"))
Dim selectedState As String = ""
Dim selectedCount As Integer = 0
For Each item As ListItem In ddlStates.Items
If item.Selected Then
selectedCount += 1
selectedState += item.Value & ","
End If
Next
If selectedCount > 0 Then
Dim query As String = String.Format("select CityId, CityName from Cities where StateId IN ({0})", selectedState.TrimEnd(","c))
BindListBox(ddlCities, query, "CityName", "CityId", "Select City")
ddlCities.Enabled = True
End If
End Sub
Protected Sub Submit(ByVal sender As Object, ByVal e As EventArgs)
Dim con As SqlConnection = Nothing
Dim cmd As SqlCommand = Nothing
Dim id As String = ""
Dim stateName As String = ""
For Each item As ListItem In ddlCountries.Items
If item.Selected Then
id += item.Value
con = New SqlConnection(constr)
cmd = New SqlCommand("INSERT INTO TestCountryData VALUES(@CountryName,@CountryId)", con)
cmd.Parameters.AddWithValue("@CountryName", item.Text)
cmd.Parameters.AddWithValue("@CountryId", id)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End If
Next
For Each item As ListItem In ddlStates.Items
If item.Selected Then
stateName += item.Text & " "
End If
Next
For Each item In stateName.Split(" "c)
If Not String.IsNullOrEmpty(item) Then
con = New SqlConnection(constr)
cmd = New SqlCommand("INSERT INTO TestStateData VALUES(@StateName,@CountryId)", con)
cmd.Parameters.AddWithValue("@StateName", item)
cmd.Parameters.AddWithValue("@CountryId", id)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
cmd = New SqlCommand("SELECT * FROM TestStateData", con)
Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable()
da.Fill(dt)
cmd = New SqlCommand("SELECT * FROM TestCountryData", con)
Dim da1 As SqlDataAdapter = New SqlDataAdapter(cmd)
Dim dt1 As DataTable = New DataTable()
da1.Fill(dt1)
Me.gvStateData.DataSource = dt
Me.gvStateData.DataBind()
Me.gvCountryData.DataSource = dt1
Me.gvCountryData.DataBind()
End If
Next
End Sub
Screenshot
