Click here to Skip to main content
16,015,414 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi, I have WPF listbox which contains employees names as displayed data ,combobox for countries and combobox for cities ,when I select data from this list I want to show employee 's country & city at this two comboboxes like that

The XAML Window:
C#
<Window.Resources>
        <!--get employee name and add it to list-->
        <DataTemplate x:Key="EmpFullNameTemplate" >
            <TextBlock Text="{Binding EmpFullName}" FontSize="14" Foreground="Black" FontWeight="Bold" 
                       FontFamily="Arial"></TextBlock>
        </DataTemplate>
    </Window.Resources>
        <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="66*" />
            <RowDefinition Height="204*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="71*" />
            <ColumnDefinition Width="132*" />
            <ColumnDefinition Width="190*" />
        </Grid.ColumnDefinitions>

        <!-- Emp Country-->
        <TextBlock Name="blkEmpContries" Text=" الـبــلــد" Height="20" Margin="12,12,15,34" />
        <ComboBox Grid.Column="1" Name="cmbContries" Height="20" Margin="0,12,18,34" 
                  SelectionChanged="cmbContries_SelectionChanged" />
        <!-- Emp Country-->
        <TextBlock Grid.Row="1" Name="blkEmpCities" Text=" الـمـحـافـظـة" Height="20" Margin="12,9,0,175" />
        <ComboBox Grid.Column="1" Grid.Row="1" Name="cmbEmpCities" Height="20" Margin="6,9,18,175" />
            
        <ListBox Grid.Column="2" Grid.RowSpan="2" HorizontalAlignment="Stretch" Margin="11,13,12,16" Name="lstEmployees" 
                          VerticalAlignment="Stretch" ItemsSource="{Binding Tables[0]}"  removed="Salmon"
                          ItemTemplate="{StaticResource EmpFullNameTemplate}" Foreground="Black"
                          ScrollViewer.VerticalScrollBarVisibility="Auto" 
                         BorderBrush="#FFAD7F30" SelectionChanged="lstEmployees_SelectionChanged" />
    </Grid>


Code behind:

C#
Int32 cntryID, crntEmpId, cityId;

        string ConStr = "Data Source=.;Initial Catalog=MenofiaHospital;User ID=mohamed;Password=ewies";

        #region get countries info
        // this is "" Stored Procedure
        // SELECT CountryID, CountryName FROM dbo.CountriesTbl
       
        private void contriList()
        {
            SqlConnection SqlCon = new SqlConnection(ConStr);
            // get all countries data      
            SqlCommand SqlCmd = new SqlCommand();
            SqlCmd.Connection = SqlCon;
            SqlCmd.CommandType = CommandType.StoredProcedure;
            SqlCmd.CommandText = "SelAllCoubtries";
            SqlCon.Open();
            SqlDataAdapter dap = new SqlDataAdapter();
            dap.SelectCommand = SqlCmd;
            DataSet ds = new DataSet();
            dap.Fill(ds);
            SqlCon.Close();
            bindContries(ds);
        }

        private void bindContries(DataSet dsGovs)
        {
            List<ContrisClass> cntrisList = new List<ContrisClass>();
            for (int i = 0; i < dsGovs.Tables[0].Rows.Count; i++)
            {
                cntrisList.Add(new ContrisClass
                                (Convert.ToInt32(dsGovs.Tables[0].Rows[i]["CountryID"]),
                                dsGovs.Tables[0].Rows[i]["CountryName"].ToString()));
            }
            dsGovs = null;
            cmbContries.ItemsSource = cntrisList;
            cmbContries.DisplayMemberPath = "CountryName";
            cmbContries.SelectedValuePath = "CountryID";
        }
        #endregion

        #region get cities name according to selected country ID
        // This is "SelAllCities" StoredProcedure
        // select CityID,CityName from CitiesTbl where CountryID = @CountryID order by CityName
       
        private void citiesList(int CountryID)
        {
            SqlConnection SqlCon = new SqlConnection(ConStr);
            // twons menu           
            SqlCommand SqlCmd = new SqlCommand();
            SqlCmd.Connection = SqlCon;
            SqlCmd.CommandType = CommandType.StoredProcedure;
            SqlCmd.CommandText = "SelAllCities";
            SqlCon.Open();
            SqlParameter ParCities = new SqlParameter();
            ParCities.Direction = ParameterDirection.Input;
            ParCities.ParameterName = "@CountryID";
            ParCities.SqlDbType = SqlDbType.Int;
            ParCities.Value = CountryID;
            SqlCmd.Parameters.Add(ParCities);
            SqlDataAdapter dap = new SqlDataAdapter();
            dap.SelectCommand = SqlCmd;
            DataSet ds = new DataSet();
            dap.Fill(ds);
            SqlCon.Close();
            bindTowns(ds);
        }

        private void bindTowns(DataSet dsTowns)
        {
            List<CityClass> townList = new List<CityClass>();
            for (int i = 0; i < dsTowns.Tables[0].Rows.Count; i++)
            {
                townList.Add(new CityClass
                             (Convert.ToInt32(dsTowns.Tables[0].Rows[i]["CityID"]),
                             dsTowns.Tables[0].Rows[i]["CityName"].ToString()));
            }
            dsTowns = null;
            cmbEmpCities.ItemsSource = townList;
            cmbEmpCities.DisplayMemberPath = "CityName";
            cmbEmpCities.SelectedValuePath = "CityID";
        }

        private void cmbContries_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            cntryID = Convert.ToInt32(this.cmbContries.SelectedValue);
            citiesList(cntryID);
        }
        #endregion

        #region get all employees 
        
        // this is "SelEmpsInfo" StoredProcedure from SQL Server
        // SELECT EmpID, EmpFullName FROM dbo.EmployeesTble 

        private void bindEmployeesInfo()
        {
            SqlConnection SqlCon = new SqlConnection(ConStr);
            // guests menu           
            SqlCommand SqlCmdAllEmpsInfo = new SqlCommand();
            SqlCmdAllEmpsInfo.Connection = SqlCon;
            SqlCmdAllEmpsInfo.CommandType = CommandType.StoredProcedure;
            SqlCmdAllEmpsInfo.CommandText = "SelEmpsInfo";
            SqlCon.Open();

            SqlDataAdapter dap1 = new SqlDataAdapter();
            dap1.SelectCommand = SqlCmdAllEmpsInfo;
            DataSet ds1 = new DataSet();
            dap1.Fill(ds1, "EmployeesTble");
            SqlCon.Close();
            lstEmployees.DataContext = ds1;
        }
        #endregion

       

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            contriList();
            bindEmployeesInfo();
        }

        #region get Employee info according to selected value from listbox and bind it to comboboxes
        // this is "SelAllEmpInfo" StoredProcedure

        // SELECT dbo.EmployeesTble.CityID, dbo.CitiesTbl.CityName, dbo.CitiesTbl.CountryID, 
        // dbo.CountriesTbl.CountryName FROM  dbo.CitiesTbl INNER JOIN dbo.CountriesTbl ON 
        // dbo.CitiesTbl.CountryID = dbo.CountriesTbl.CountryID INNER JOIN dbo.EmployeesTble 
        // ON dbo.CitiesTbl.CityID = dbo.EmployeesTble.CityID where EmployeesTble.EmpID = @EmpID

        public ArrayList SelAllEmpInfo(Int32 EmpId)
        {
            SqlConnection SqlCon = new SqlConnection(ConStr);
            SqlCommand SqlCmd = new SqlCommand();
            SqlCmd.Connection = SqlCon;
            SqlCmd.CommandType = CommandType.StoredProcedure;
            SqlCmd.CommandText = "SelAllEmpInfo";
            SqlCon.Open();
            SqlParameter ParEmpId = new SqlParameter();
            ParEmpId.Direction = ParameterDirection.Input;
            ParEmpId.ParameterName = "@EmpID";
            ParEmpId.SqlDbType = SqlDbType.BigInt;
            ParEmpId.Value = EmpId;
            SqlCmd.Parameters.Add(ParEmpId);

            SqlDataReader Dr = SqlCmd.ExecuteReader();
            ArrayList empList = new ArrayList();
            if (Dr.HasRows)
            {
                while (Dr.Read())
                {
                    empList.Add(Dr[0].ToString());
                    empList.Add(Dr[1].ToString());
                    empList.Add(Dr[2].ToString());
                    empList.Add(Dr[3].ToString());
                }
            }
            SqlCon.Close();
            return empList;
        }

        private void lstEmployees_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                DataRowView drv = lstEmployees.SelectedValue as DataRowView;

                crntEmpId = Convert.ToInt32(drv["EmpID"]);

                ArrayList empList = SelAllEmpInfo(crntEmpId);

                cmbEmpCities.DisplayMemberPath = empList[1].ToString();
                cmbEmpCities.Text = empList[1].ToString();
                cmbEmpCities.SelectedValuePath = empList[0].ToString();
                cityId = Convert.ToInt32(empList[0]);

                cmbContries.DisplayMemberPath = empList[3].ToString();
                cmbContries.Text = empList[3].ToString();
                cmbContries.SelectedValuePath = empList[2].ToString();
                contriList();
            }
            catch { }
        }

        #endregion
    }


    class ContrisClass
    {
        private int _ContryID = -1;
        private string _ContryName = "";

        public ContrisClass(int contryID, string contryName)
        {
            this._ContryID = contryID;
            this._ContryName = contryName;
        }

        public int CountryID
        {
            get { return _ContryID; }
            set { _ContryID = value; }
        }

        public string CountryName
        {
            get { return _ContryName; }
            set { _ContryName = value; }
        }
    }

    class CityClass
    {
        private int _CityID = -1;
        private string _CityName = "";

        public CityClass(int cityID, string CityName)
        {
            this._CityID = cityID;
            this._CityName = CityName;
        }
        public int CityID
        {
            get { return _CityID; }
            set { _CityID = value; }
        }
        public string CityName
        {
            get { return _CityName; }
            set { _CityName = value; }
        }
    }


my problem is when I select data from list box "employee name" nothing appear in both comboboxes , but in debug mode I see data retrieved from array list and binding to comboboxes.

any help please, thanks.
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900