来自数据库的ASP dropdownlist数据绑定

时间:2012-07-21 12:40:06

标签: c# asp.net

我正在使用2下拉列表。国家排名第一,州排名第二。如果我从1英尺下拉列表中选择印度,第二个将自动从数据库中自动绑定印度的所有州。

我已将country_tbl用于国家/地区,并使用第一个下拉列表和india_tblus_tblsri_tbl绑定有关这些国家/地区的绑定状态。

请帮帮我。我该怎么办?

我的代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        method1();
    }
}

protected void method1()
{
    string s1 = "data source=ALOK-PC\\SQLEXPRESS;database=MySite;integrated security=true";
    SqlConnection con = new SqlConnection(s1);
    string s2 = "select * from country";
    SqlCommand cmd = new SqlCommand(s2, con);
    con.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    DropDownList1.DataTextField = "name";
    DropDownList1.DataValueField = "name";
    DropDownList1.DataSource = dr;
    DropDownList1.DataBind();
    con.Close();
    dr.Close();
}

protected void methodInd()
{
    string s1 = "data source=ALOK-PC\\SQLEXPRESS;database=MySite;integrated security=true";
    SqlConnection con = new SqlConnection(s1);
    string s2 = "select * from india";
    SqlCommand cmd = new SqlCommand(s2, con);
    con.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    DropDownList2.DataTextField = "name";
    DropDownList2.DataValueField = "name";
    DropDownList2.DataSource = dr;
    DropDownList2.DataBind();
    con.Close();
    dr.Close();
}

protected void methodpak()
{
    string s1 = "data source=ALOK-PC\\SQLEXPRESS;database=MySite;integrated security=true";
    SqlConnection con = new SqlConnection(s1);
    string s2 = "select * from pakistan";
    SqlCommand cmd = new SqlCommand(s2, con);
    con.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    DropDownList2.DataTextField = "name";
    DropDownList2.DataValueField = "name";
    DropDownList2.DataSource = dr;
    DropDownList2.DataBind();
    con.Close();
    dr.Close();
}

protected void methodsri()
{
    string s1 = "data source=ALOK-PC\\SQLEXPRESS;database=MySite;integrated security=true";
    SqlConnection con = new SqlConnection(s1);
    string s2 = "select * from srilanka";
    SqlCommand cmd = new SqlCommand(s2, con);
    con.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    DropDownList2.DataTextField = "name";
    DropDownList2.DataValueField = "name";
    DropDownList2.DataSource = dr;
    DropDownList2.DataBind();
    con.Close();
    dr.Close();
}

protected void submit_Click(object sender, EventArgs e)
{

}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (DropDownList1.SelectedItem.Text=="india")
    {
        methodInd();
    }
    else if (DropDownList1.SelectedItem.Text=="pakistan")
    {
        methodpak();
    }
    else if (DropDownList1.SelectedItem.Text=="srilanka")
    {
        methodsri();
    }
}

2 个答案:

答案 0 :(得分:1)

您的方法是错误的,您不应该为每个国家/地区的状态设置单独的表,以便您可以有一个查询和一个方法绑定到您的州列表

将架构更改为

CREATE TABLE Country 
(
  id int,  
  country_name,
  primary key(id)
)

Country_State 
(
  id  int, 
  state_name, 
  country_id,
  primary key(id)
)

country_id是链接回国家/地区的外键

country
------------------------
id  Name
------------------------
1   India
2   Pakistan


country_state
-----------------------------------
id  Name              country_id
------------------------------------
1   Delhi             1
2   Bangladesh        1
3   Some Indians      1
4   S1_Pakistan       2
5   S2_Pakistan       2

您的疑问

Select Id, Name from Country

Select Id, Name From country_states Where country_id = @id
  

只调用一种方法来绑定所有状态

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
     string country_id =  DropDownList1.SelectedValue;
     BindStatesByCountry(country_id);
}

protected void methodsri(string countryId) //change this to BindStatesByCountry
{
    string s1 = "data source=ALOK-PC\\SQLEXPRESS;database=MySite;integrated security=true";
    SqlConnection con = new SqlConnection(s1);
    con.Open();

    string s2 = "select * from country_states where country_id=@countryId";
    SqlCommand cmd = new SqlCommand(s2, con);
    cmd.Parameters.AddWithValue("@countryId", countryId);
    SqlDataReader dr = cmd.ExecuteReader();
    DropDownList2.DataTextField = "name";
    DropDownList2.DataValueField = "name";
    DropDownList2.DataSource = dr;
    DropDownList2.DataBind();
    con.Close();
    dr.Close();
}

希望这有帮助

答案 1 :(得分:0)

您想要实现主详细信息模式,请参阅此网址: http://msdn.microsoft.com/en-us/library/aa581789.aspx 首选存储过程而不是sql注入 最好的关注