如何将数据绑定到asp.net中其他下拉列表的选定值的下拉列表?我已将数据绑定到所有下拉列表

时间:2015-08-06 14:46:27

标签: c# asp.net npgsql

// .aspx.cs代码:

protected void ddldistrict_SelectedIndexChanged(object sender, EventArgs e)
{
    try {
        ddltaluka.Enabled = true;
        string d1 = ddldistrict.Text;
        NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=5432;User Id=postgres;Password=*******;Database=guj_data;");
        conn.Open();
        string sql = "SELECT tname FROM taluka_geo_bnd_box WHERE district='"+d1+"'";
        NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);

        ds.Reset();
        da.Fill(ds);
        dt = ds.Tables[0];
        ddltaluka.DataSource = ds;
        ddltaluka.DataTextField = "tname";
        ddltaluka.DataBind();

        conn.Close();
      }
    catch(Exception e3)
    {
        throw e3;
    }
}
protected void ddltaluka_SelectedIndexChanged(object sender, EventArgs e)
{
    try { 
    ddlvillage.Enabled = true;
    string t1 = ddltaluka.Text;
    string d1 = ddldistrict.Text;
    NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=5432;User Id=postgres;Password=*****;Database=guj_data;");
    conn.Open();
    string sql = "SELECT vname FROM village_boundary_geo_bnd_box WHERE tname='"+t1+"' AND district='"+d1+"'";
    NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);

    ds.Reset();
    da.Fill(ds);
    dt = ds.Tables[0];
    ddlvillage.DataSource = ds;
    ddlvillage.DataTextField = "vname";
    ddlvillage.DataBind();

    conn.Close();
  }
    catch(Exception e4)
    {
        throw e4;
    }
}

2 个答案:

答案 0 :(得分:2)

如果我理解正确的话; ddlvillage数据绑定发生在页面加载时 当调用方法ddltaluka_selectedIndexChanged时,你尝试绑定新数据吗,但它会回到原来的ddlVillage列表吗?

如果是这种情况,您只需要在初始页面加载时为ddlVillage执行初始数据绑定,而不是每个回发

  if (!IsPostBack)
  {
       //bind your initial data here

  }

答案 1 :(得分:-1)

当您有三个下拉列表时,一个取决于前一个值,您必须记住,当用户从第一个列表中选择一个值并更新第二个列表时,这不会触发第二个列表的选定值已更改。如果直接调用second_list的selected_valuechanged事件处理程序,在更新它的数据绑定之后,您还必须记住所选的值尚未更新。其他事件必须发生在两者之间。因此,对于三个列表,您必须将数据绑定移动到单独的函数,如下所示,并按如下方式调用它们:

BindListA()
    ... read the data for A and bind to dropdown A
    ... call BindListB(list A *default* value (first value?))

BindListB(A value)
    ... using the A value passed to this function
    ... read the data for B and bind this to dropdown B
    ... call BindListC(list B *default* value (first value?))

BindListC(B value)
    ... using the B value passed to this function
    ... read the data for C and bind to dropdown C

On page_load event
    if it is not a postback
        call BindListA()

On ListA_selectedIndexChanged event
    call BindListB(ListA selected Value)

On ListB_selectedIndexChanged event
    call BindListC(ListB selected value)

On ListC_selectedIndexChanged event
    do whatever it is you want to do with the user's selection off list C

如果这可以解决您的问题,请提出建议。将来,没有人能够容忍缺乏描述,也不会试图像这样帮助你。如果您需要帮助,您需要显示相关代码,并至少给出问题的中途描述。