zoukankan      html  css  js  c++  java
  • 牛腩购物15:中国省市县数据库,DropDownList 绑定数据库 下拉选择省市,购物车的实现,使用sqlserver 2008 导入access数据库,不能在 DropDownList 中选择多个项

    中国省市县数据库:我们拿到的是 access 2000 的版本,我们使用 sql2008的 导入数据功能。

    image

    image

    image

    image

    image

    完成后,我们就可以在 Niunanshop数据库里面看到刚才的2个表了,但是注意,通过access转换过来的表,要修改一下主键(有的还需要修改数据类型)。

    下面,我们再次使用 动软生成器来生成 省市的Model层和 DAL 层代码。

    image image

    分别把 生成的 Model 层的 代码 和  DAL 层的代码 粘贴到 项目中的  Model层和DAL层  ,还要记得去 DAL层删除一些动软生成器生成的不必要的代码

    整行删除的快捷键是 Ctrl + L (感觉更像是剪切)

    image

    现在去 myzl.aspx 页面,修改 省市的下拉列表。 用到控件 DropDownList

    不能在 DropDownList 中选择多个项

    为什么会出现这个原因呢?我们首先来看看代码。

    if (!Page.IsPostBack)
                {
                    //绑定省份下拉列表
                    ddlprovince.DataTextField = "province"; //下拉列表 显示的文字对应的数据字段
                    ddlprovince.DataValueField = "provinceID";  //值
                    ddlprovince.DataSource = new Niunan.Shop.DAL.ProvinceDAO().GetListArray(""); //这里返回的是一个 泛型
                    ddlprovince.DataBind();
    
                     
    
               //绑定城市下拉列表
                  ddlcity.DataTextField = "city";
                ddlcity.DataValueField = "cityID";
                ddlcity.DataSource = new Niunan.Shop.DAL.CityDAO().GetListArray("father=" + ddlprovince.SelectedValue);
                ddlcity.DataBind();
    
     
    ListItem li = radlSex.Items.FindByValue(u.sex.ToString()); //通过值来寻找 item
                        if (li != null)
                        {
                            li.Selected = true;
                        }
                        txtAge.Text = u.age.ToString();
    
                         
                        li = ddlprovince.Items.FindByValue(u.province);  //这里是根据值来查找选择符合的。如果是查找文本  FindByText
                        
                        if (li!=null)
                        {
                            li.Selected = true;
                        }
    
                        ddlcity.ClearSelection();
                        li = ddlcity.Items.FindByValue(u.city);
                        if (li != null)
                        {
                            li.Selected = true;
                        }
    

    当我们在页面加载的时候,第一次他的省和城市,都是北京。因为他默认是读取 省市表,然后把第一个选择为默认选择的。

    但是,我们继续往下执行的时候,我们根据用户的省份来选择省,又执行了一次 Selected,但是之前我们已经选择了北京,所以这个时候,我们又selected 就报错了。所解决方法就是,当我们执行到,通过用户的省份来执行选择之前,清除掉原来的 selected

    ddlprovince.ClearSelection();//清除掉原来的选择,因为默认绑定一般是选择的第一项,但是这里应该是根据数据库的用户值来选择
    

    并且最好是把下面的 city 也清除一次

    ddlcity.ClearSelection();

    但是这样之后,我们发现,省份可以有选择了,但是城市居然还是北京?这是为什么呢?因为虽然我们上面的省份被通过用户重新选择了,但是城市不像省份那样默认就有很多,所以城市还停留在一开始进入页面的时候的北京市,所以我们要在 通过用户的省份定位select的时候,把城市也加载一遍。

    正确代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Niunan.Shop.Web.user
    {
        public partial class myzl : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    //绑定省份下拉列表
                    ddlprovince.DataTextField = "province"; //下拉列表 显示的文字对应的数据字段
                    ddlprovince.DataValueField = "provinceID";  //值
                    ddlprovince.DataSource = new Niunan.Shop.DAL.ProvinceDAO().GetListArray(""); //这里返回的是一个 泛型
                    ddlprovince.DataBind();
    
                    //绑定城市下拉列表
                    BindCity();
    
                    litName.Text = User.Identity.Name;
                    litType.Text = User.Identity.IsAuthenticated.ToString();//如果登录验证成功了,那么就显示true
                    Niunan.Shop.Model.User u = new Niunan.Shop.DAL.UserDAO().GetModel(User.Identity.Name);
                    if (u != null)
                    {
                        litType.Text = u.type == "normal" ? "(普通会员)" : "(VIP会员)";
                        txtEmail.Text = u.email;
                        if (u.isopenemail == 1)
                        {
                            radIsopen1.Checked = true;
                        }
                        else
                        {
                            radIsopen2.Checked = true;
                        }
                        txtRealName.Text = u.realname;
                        txtCardid.Text = u.cardid;
                        ListItem li = radlSex.Items.FindByValue(u.sex.ToString()); //通过值来寻找 item
                        if (li != null)
                        {
                            li.Selected = true;
                        }
                        txtAge.Text = u.age.ToString();
    
                        ddlprovince.ClearSelection();//清除掉原来的选择,因为默认绑定一般是选择的第一项,但是这里应该是根据数据库的用户值来选择
    
                        li = ddlprovince.Items.FindByValue(u.province);  //这里是根据值来查找选择符合的。如果是查找文本  FindByText
                        
                        if (li!=null)
                        {
                            li.Selected = true;
                            BindCity();// 这里为什么还要重新绑定呢?因为虽然我们上面的省份被通过用户的省份重新select了,
    但是城市不像省份那样默认就有很多,所以城市还停留在一开始进入页面的时候的北京市,所以我们要在 通过用户的省份定位select的时候,把城市也加载一遍。
    
                        }
    
                        ddlcity.ClearSelection();
                        li = ddlcity.Items.FindByValue(u.city);
                        if (li != null)
                        {
                            li.Selected = true;
                        }
                        txtAddress.Text = u.address;
                        txtPhone.Text = u.phone;
                        txtPostCode.Text = u.postcode;
                        txtqq.Text = u.qq;
                        txtUrl.Text = u.url;
                        txtIntro.Text = u.intro;
    
    
    
                    }
                }
            }
    
            protected void btnSave_Click(object sender, EventArgs e)
            {
                string email = txtEmail.Text.Trim();
                int isopen =0;
                if (radIsopen1.Checked == true)
                {
                    isopen = 1;
                }
                string realname = txtRealName.Text.Trim();
                string cardid = txtCardid.Text.Trim();
                string sex = radlSex.SelectedValue;
                string age = txtAge.Text.Trim();
                string province = ddlprovince.SelectedValue;// 这里的省市  我们都获取的是 值,而非文本。例如 420000(值) 湖北省(文本)
                string city = ddlcity.SelectedValue;
                string address = txtAddress.Text.Trim();
                string phone = txtPhone.Text.Trim();
                string postcode = txtPostCode.Text.Trim();
                string qq = txtqq.Text.Trim();
                string url = txtUrl.Text.Trim();
                string intro = txtIntro.Text.Trim();
    
                int x;
                if (!int.TryParse(age,out x))
                {
                    age="0";
                }
    
                //保存到数据库,注意,在这里,我们要先根据 用户名获取到model,再来修改
                Niunan.Shop.Model.User u = new Niunan.Shop.DAL.UserDAO().GetModel(User.Identity.Name);
                if (u!=null)
                {
                    u.email = email;
                    u.isopenemail = isopen;
                    u.realname = realname;
                    u.cardid = cardid;
                    u.age = int.Parse(age);
                    u.sex = int.Parse(sex);
                    u.province = province;
                    u.city = city;
                    u.address = address;
                    u.phone = phone;
                    u.postcode = postcode;
                    u.qq = qq;
                    u.url = url;
                    u.intro = intro;
                }
                new Niunan.Shop.DAL.UserDAO().Update(u);
                Niunan.Shop.Utility.Tool.alert("保存成功", this.Page);
                
            }
    
            //选择省份 就要重新修改 城市
            protected void ddlprovince_SelectedIndexChanged(object sender, EventArgs e)
            {
                BindCity();
            }
    
            private void BindCity()
            {
                //绑定城市下拉列表
                ddlcity.DataTextField = "city";
                ddlcity.DataValueField = "cityID";
                ddlcity.DataSource = new Niunan.Shop.DAL.CityDAO().GetListArray("father=" + ddlprovince.SelectedValue);
                ddlcity.DataBind();
            }
        }
    }
    

    最后,我们记得要给省份的这个 控件加上 自动回发属性。AutoPostBack="True"

  • 相关阅读:
    20150629_Andriod_06_插入_删除_弹出式操作数据
    20150626_Andriod_02_ListView2_列表与详细信息
    Andriod 字符串数组里加入字符串元素
    20150625_Andriod_02_ListView2_多条目显示_选中
    20150625_Andriod_01_ListView1_条目选中
    Android开发中完全退出程序的三种方法
    Python中的单例模式的几种实现方式的及优化
    jdk与jre
    页面跳转
    用for循环创建对象
  • 原文地址:https://www.cnblogs.com/iceicebaby/p/2411324.html
Copyright © 2011-2022 走看看