关于Dropdownlist 与 autopostBack 问题-多级联动 例 省/市/区

1、Dropdownlist与数据库绑定。

string sql_subject="select subject from tt_subject";
            OleDbConnection Conn=db.okConn();
            Conn.Open();
            OleDbCommand cmd = new OleDbCommand(sql_subject, Conn); //这里从数据库中读入到Dropdownlist
            OleDbDataReader reader = cmd.ExecuteReader();
            Dropdownlist9.DataSource = reader;
            Dropdownlist9 .DataTextField ="subject";//字段
            Dropdownlist9.DataValueField = "subject";
            Dropdownlist9 .DataBind ();

2、多个Dropdownlist选定的联动:如 省 市 区的选择情况,就要联动

如果有两个Dropdownlist,在动态绑定数据的情况下,则第一个autopost为true;看另个Dropdownlist的联动例子,
pageload
{
 if (!IsPostBack)
    { 
            OleDbConnection conn = data.Acce_Conn();
        conn.Open();
        OleDbCommand cmd = new OleDbCommand("select distinct zhen from db",conn);//distinct表示不重复出现相同的数据,很好用的哦。可能有些数据重复,如一些学校是同一个镇的
        OleDbDataReader reader = cmd.ExecuteReader();
        zhen.DataSource = reader;
        zhen.DataTextField = "zhen";
        zhen.DataValueField = "zhen";
        zhen.DataBind();
        conn.Close();
ListItem default_selected = new ListItem(); //添加一个默认的"请选择"item,放在databind()后
        default_selected.Text = "请选择";
        default_selected .Value ="00";
        default_selected .Selected =true ;
        zhen.Items.Add(default_selected );
    }
}
然后在zhen_SelectedIndexChanged事件中,再行绑定
protected void zhen_SelectedIndexChanged(object sender, EventArgs e)
    {
        OleDbConnection conn = data.Acce_Conn();
        conn.Open();
        OleDbCommand cmd2 = new OleDbCommand("select school from school_data where zhen='" + zhen.SelectedValue + "' ", conn);
        OleDbDataReader reader2 = cmd2.ExecuteReader();
        school.DataSource = reader2;
        school.DataTextField = "school";
        school.DataValueField = "school";
        school.DataBind();
        conn.Close();
    }
这样就是最基本的联动了,省\市\区等情况类推.
3、如果有个控件如checkBox 设置了autopostBack ,每次checkBox 一选择,服务器就接受到autopostback返回的信息,但Dropdownlist的选择又是选默认的的第一个。则要保护好数据最好就是把绑定数据放在

 if (!IsPostBack)

{}内,则,可以解决问题。原来的全局刷新,这里应称为局部刷新,不知道对不对。

总算问题解决了。应用实例:

Dropdownlist9 设置了autopostBack=true;

if (!IsPostBack)

{   db link

do something

  }

 string sql_db = "select * from data where sub='" + Dropdownlist9.SelectedValue + "'";
 Label22.Text = dbcen.accessGetDataSet(sql_db).Tables[0].Rows.Count.ToString();

这样,就是联动了。Dropdownlist9选择,则Label22.Text 对应变化,把表中的符合条件的记录数目取出来。

 

你可能感兴趣的:(list)