标签:
首先要明白Webform的运行顺序,当开始启动时候,首先执行的是Page_Load事件, 当点击任意按钮后,每次点击都要先执行一遍Page_Load(在这里Page_Load里面的事件是给数据控件加载数据)事件,然后才执行按钮上的内容。
但是如果是一个数据控件,里面存的是一些数据,如果用foreach遍历逐项给数据控件添数据的话,每次点击按钮(即刷新页面)都会执行一遍Page_Load,也就是说每次都要重复添加原来的数据,所以这就需要一个判断条件,使它只会第一次启动的时候走Page_Load事件,这样就能避免重复添加数据的情况。。
所需要的判断条件是:IsPostBack 该值是bool型的,它反映的是 页是否是第一次呈现还是为了响应回发而加载,如果是为了响应回发而加载 即为True,反之为False。
中国省市的三级联动:
总体思路是,在页面上做三个下拉列表,分别对应省、市辖、市区。 当页面加载的时候,将对应的数据添加到下拉列表中。用的是DataSouece属性,当然这里最后比Winform多了一步,需要将数据最后再绑定上,即DataBind(); 因为这里Page_Load里加载的是数据控件,所以需要加判断条件if(!IsPostBack),里面的!是取相反的值,因为当第一次页面加载的时候并不是为了"响应回发"而加载,所以结果为false,加上! 变成True,这样就只会在第一次启动的时候加载数据,从而不会重复添加。当三个列表全部加载好后,这时就需要改变某个下拉列表的值,从而实现联动效果。。 用到的是需要用到的是SelectedIndexChanged事件,并且要把dropdownlist对象中叫AutoPostBack(当选定内容更改后,自动回发到服务器)的值改为True,只有改成True,选定的内容才能上传回服务器,从来才会重新加载。
下面是代码:
1、这里是查询数据库的方法。 LinQToSql public class ChinaBF { private MyDBDataContext _context = new MyDBDataContext(); public ChinaBF() { } public List<ChinaStates> SelcetPro(string AreaCode) //加载所有省份 { return _context.ChinaStates.Where(P => P.ParentAreaCode == AreaCode).ToList(); } public List<ChinaStates> SelcetCity1(string AreaCode) //根据省份加载市辖 { return _context.ChinaStates.Where(P => P.ParentAreaCode == AreaCode).ToList(); } public List<ChinaStates> SelcetCity2(string AreaCode) //根据市辖加载市区 { return _context.ChinaStates.Where(P => P.ParentAreaCode == AreaCode).ToList(); } } 2、这里是服务器代码。 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) //页面加载的时候 { //只要在页面里点击按钮或者刷新网页,都是先走的Page_Load这一步,所以有些时候会出现数据重复的可能,为此,必须加一个判断条件,看看是不是第一次加载 if(!IsPostBack) //IsPostBack 获取一个值,看看指示页是第一次呈现,还是为了响应回发而加载。如果是为了响应回发,那么结果就是true { //运行顺序一定要清楚,先运行Page_Load //当页面刚刚加载的时候,把三个下拉列表的数据给添加进去,这里默认的是以北京为基础的。 Load(); //加载所有的表 } } public void Load() { BindPro("0001"); //加载省份 BindCity1("11");//根据省份加载市辖 BindCity2("1101");//根据市辖加载市区 } public void BindPro(string AreaCode) //加载省 { //将所有的省份查询出来,然后放在下拉列表里 List<ChinaStates> list = new ChinaBF().SelcetPro(AreaCode); DropDownList1.DataSource = list; //下拉列表1的数据源是list DropDownList1.DataTextField = "AreaName"; //下拉列表1显示的是AreaName值 DropDownList1.DataValueField = "AreaCode";//下拉列表1隐藏的是AreaCode值 //前面只是规定好下拉列表要绑定的数据和显示、隐藏的值了,最后还要把数据绑定上。 DropDownList1.DataBind(); //数据绑定 } public void BindCity1(string AreaCode) //加载市辖 { //根据选定的省份查询出相对应的市辖,这里以北京为基础 List<ChinaStates> list = new ChinaBF().SelcetCity1(AreaCode); DropDownList2.DataSource = list; //下拉列表2的数据源是list DropDownList2.DataTextField = "AreaName"; //下拉列表2显示的是AreaName值 DropDownList2.DataValueField = "AreaCode";//下拉列表2隐藏的是AreaCode值 //前面只是规定好下拉列表要绑定的数据和显示、隐藏的值了,最后还要把数据绑定上。 DropDownList2.DataBind(); //数据绑定 } public void BindCity2(string AreaCode) //加载区 { //根据选定的市辖查询出相对应的市市区,这里以北京市辖为基础 List<ChinaStates> list = new ChinaBF().SelcetCity2(AreaCode); DropDownList3.DataSource = list; //下拉列表3的数据源是list DropDownList3.DataTextField = "AreaName"; //下拉列表3显示的是AreaName值 DropDownList3.DataValueField = "AreaCode";//下拉列表3隐藏的是AreaCode值 //前面只是规定好下拉列表要绑定的数据和显示、隐藏的值了,最后还要把数据绑定上。 DropDownList3.DataBind(); //数据绑定 } //下面是当下拉列表的值改变的时候,其余两个也随之改变 ,,需要用到的是SelectedIndexChanged事件,并且要把dropdownlist对象中叫AutoPostBack(当选定内容更改后,自动回发到服务器)的值改为True,只有改成True,选定的内容才能上传回服务器 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { string Pro = DropDownList1.SelectedValue.ToString(); //加载市辖 BindCity1(Pro); //根据选定的省份加载市辖 string City = DropDownList2.SelectedValue.ToString();//加载市区 BindCity2(City);//根据选定的市辖加载市区 } protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e) { string City = DropDownList2.SelectedValue.ToString();//加载市区 BindCity2(City);//根据选定的市辖加载市区 } }
标签:
原文地址:http://www.cnblogs.com/lk-kk/p/4658717.html