public DataTable GetTables(string sql) //返回ds.Tables["defaulttable"]
{ string SqlConnectionStr=System.Configuration.ConfigurationSettings.AppSettings["SqlConnectionStr"];
SqlConnection Sqlconn=new SqlConnection(SqlConnectionStr);
SqlDataAdapter da=new SqlDataAdapter(sql,Sqlconn);
DataSet ds=new DataSet();
da.Fill(ds,"defaulttable");
return ds.Tables["defaulttable"];
                  
        string sql2="select * from province";
                        Admin.Admin_ClassDb classdb=new Admin.Admin_ClassDb();//引入数据库操作类
sf.DataSource=classdb.GetTables(sql2).DefaultView;
sf.DataTextField="province";
sf.DataValueField="province";
sf.DataBind();                        //省份
sf.Items.Add(new ListItem("--选择所属省份--","0"));
sf.SelectedValue="0";}
                 protected void sf_SelectedIndexChanged(object sender, System.EventArgs e)
{
string sql="select * from City where province='"+sf.SelectedValue.ToString()+"'";
Admin.Admin_ClassDb classdb=new Admin.Admin_ClassDb();//引入数据库操作类
city.DataSource=classdb.GetTables(sql).DefaultView;
city.DataTextField="City";
city.DataValueField="Cityid";
city.DataBind(); //城市}
                  protected void InitText()
                { ......//省略
                if (MyReader.HasRows)
                {
                while (MyReader.Read())
                {                   sf.Text = MyReader.GetValue(MyReader.GetOrdinal("UserProvince")).ToString();
                 
                    City.Text=MyReader.GetValuetValue(MyReader.GetOrdinal("UserCity")).ToString();

                                     
                    DLSex.Items.Clear();
                    DLSex.Items.Add(new ListItem("男", "1"));
                    DLSex.Items.Add(new ListItem("女", "0"));
                    if (MyReader.GetValue(MyReader.GetOrdinal("UserSex")).ToString() == "True")
                    {
                        DLSex.Items.FindByValue("1").Selected = true;
                    }
                    else
                    {
                        DLSex.Items.FindByValue("0").Selected = true;
                    }
                
                    if (MyReader.GetValue(MyReader.GetOrdinal("UserBirthday")).ToString() != "")
                    {
                        txtUserBirthYear.Text = System.Convert.ToDateTime(MyReader.GetValue(MyReader.GetOrdinal("UserBirthday"))).Year.ToString();
                        DLBirthMonth.Items.FindByValue(System.Convert.ToDateTime(MyReader.GetValue(MyReader.GetOrdinal("UserBirthday"))).Month.ToString()).Selected = true;
                        DLBirthDay.Items.FindByValue(System.Convert.ToDateTime(MyReader.GetValue(MyReader.GetOrdinal("UserBirthday"))).Day.ToString()).Selected = true;
                    }
                }
            }
        }
     protected void btnAdd_Click(object sender, System.EventArgs e)
    {
        try
        {
           
            int sex = System.Convert.ToInt32(DLSex.SelectedValue.ToString().Trim());
            string UserBirth = txtUserBirthYear.Text.Trim()
                + "-"
                + DLBirthMonth.SelectedValue.ToString().Trim()
                + "-"
                + DLBirthDay.SelectedValue.ToString().Trim();
            string province = sf.Text.Trim();
            string usercity = City.SelectedItem.Text.Trim();
                      }
    {
}
}执行的结果是显示了省份,而无法显示城市。而在数据库里有城市和省份的数据(福建 福州),显示出来只有福建。如果再选择其他省份的时候,会出现“City”有一个无效 SelectedValue,因为它不在项目列表中。当然city没有被显示出来为空,也就是无效selectedvalue。重点的几个地方我都标了红色。其他地方应该没有错。大家帮我看看,是哪处出现错误了,应该怎么改才可以。谢谢

解决方案 »

  1.   

    主要是是这几处:

    string sql="select * from City where province='"+sf.SelectedValue.ToString()+"'";
    sf.Text = MyReader.GetValue(MyReader.GetOrdinal("UserProvince")).ToString();
    City.Text=MyReader.GetValuetValue(MyReader.GetOrdinal("UserCity")).ToString();
     string province = sf.Text.Trim();
     string usercity = City.SelectedItem.Text.Trim();

    还有这个代码是在这里面的,忘了写了private void DataGridDataBind()
    {  string sql2="select * from province";......
      }
    还有DataGridDataBind()InitText()都有!IsPostBack。我也试着将City.Text=MyReader.....改成city.selectitms.text=myreader..........也不行,不仅城市没有显示,连其他的dropdownlist都没有显示了。
      

  2.   

    获取dropdownlist值
    sf.vlaue还要设置dropdownlist
    autoback...属性
      

  3.   

    DropDownList.Text就是获取的DropDownList.SelectedItem.Value。
      

  4.   

    1.autopostback选中2.string sql="select * from City where province='"+sf.SelectedItem.Value.ToString()+"'"; 
    sf.Text = MyReader.GetValue(MyReader.GetOrdinal("UserProvince")).ToString(); 
    City.Text=MyReader.GetValuetValue(MyReader.GetOrdinal("UserCity")).ToString(); 
    string province = sf.Text.Trim(); 
    string usercity = City.SelectedItem.Text.Trim(); 
      

  5.   

    都修改了。还是不行啊,不能显示city(城市)。
      

  6.   

    把身份的autopostback 这个属性 勾上,然后再 chage事件里面写查询语句,绑定城市的那个list 就可以了
      

  7.   

    请看贴再回答。不要再跟我说什么autopostback 这个属性 ,事件查询语句,绑定之类的。这些我都做好了。关键是让大家看看我的代码有什么错误。我的问题是显示不了城市,还有提交的时候可以选取省份城市,提交后,在数据库里也有显示省份和城市。就是在用户修改资料时候(读取数据库里的数据),所要选择的地点城市(city)显示不了。只出现了省份。
    如图所示:
      

  8.   

    我发现一个问题,后来我在页面的一角加了一个label。然后在 protected void InitText()
    {
      加了一句//label1.text=MyReader.GetValuetValue(MyReader.GetOrdinal("UserCity")).ToString(); }
    运行结果是厦门市。把city的值显示出来了。这就奇怪了为什么City.Text=MyReader.GetValuetValue(MyReader.GetOrdinal("UserCity")).ToString(); 这个就显示不了呢??我觉得应该是这句有问题。太奇怪了!!!!!!!
      

  9.   

    让我来结贴吧。搞了一个晚上。我把Item给忘了。终于弄好了。  
    City.Text=MyReader.GetValuetValue(MyReader.GetOrdinal("UserCity")).ToString(); 改成City.Items.Add(MyReader.GetValue(MyReader.GetOrdinal("UserCity")).ToString());
    这么多人没有一个能说出点意思来。哎,对CSDN没什么信心啊。