ListBox与数据库 省市选择程序

来源:互联网 发布:php项目开发视频 编辑:程序博客网 时间:2024/05/27 09:46

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;
namespace 练习
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
//使用内嵌mdf文件是必须要加的一段代码
            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
//这段代码一直到这里
            InitializeComponent();
        }
//在windows窗口加载时,在lbPro显示省份         
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(
                @"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;
Integrated Security=True;user Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_Pro";
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        item proitem = new item();//因为语句lbPro.Items.Add(proitem)添加的是对象,所以,应声明与数据库中数据相对应的类,并声明该类的实例来承接数据库中的数据,并将该实例加到列表中去
                        proitem.Proname = reader.GetString(reader.GetOrdinal("proName"));
                        proitem.Proid = reader.GetInt32(reader.GetOrdinal("ID"));
                        lbPro.Items.Add(proitem);//通过lbPro的items.add方法来添加列表的显示对象。但是如果只是这么添加,那么列表只会显示该对象的所属的类 比如该对象就是 练习.mainwindow+item  。解决办法是将lbPro的 displaymemeberpath属性设置为选项对象要显示的属性,在这里应该设置为Proname
                    }
                }
            }
        }
       //单击选择listbox所显示的省的名称时发生selectionchanged 
        private void lbPro_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            item selecteditem = (item)lbPro.SelectedItem;
            int i = selecteditem.Proid;
            using (SqlConnection conn = new SqlConnection(
                   @"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;
    Integrated Security=True;user Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_City where proId=@i";
                    cmd.Parameters.Add(new SqlParameter("i",i));
                    SqlDataReader reader = cmd.ExecuteReader();
                    lbCity.Items.Clear();//随着在省份列表中点击,市列表一直在累加,所以应该在城市的列表中去掉上一次点击的省对应的城市
                    while(reader.Read())
                    {
                        string cityname = reader.GetString(reader.GetOrdinal("cityName"));
                        lbCity.Items.Add(cityname);
                    }
                }
            }
        }
// 用来承接数据中数据的类
        public class item
        {
            string proname;
            public string Proname
            {
                get { return proname; }
                set { proname = value; }
            }
            int proid;
            public int Proid
            {
                get { return proid; }
                set { proid = value; }
            }
        }


数据库中的表格格式为:
T_Pro表:  ID , proName
T_City表:  cityName , proId 
0 0
原创粉丝点击