powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Combobox
8 сообщений из 8, страница 1 из 1
Combobox
    #39163391
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну никак не пойму, почему не отображает данные в Combobox1 из метода combo1() ? ну а Combo(2) уже вытекающее из 1 ...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
 public partial class Window1 : Window
    {
        SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=AdventureWorks2012;Persist Security Info=True;User ID=sa;Password=Password11");
           
           public Window1()
        {
            InitializeComponent();   
        }      
        
        private void combo1()
        {
                Combobox1.Items.Clear();
                SqlCommand cmd = new SqlCommand("SELECT * FROM master.dbo.sysdatabases", con);
                con.Open();
                SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Combobox1.Items.Add(dr["Name"].ToString());
                    
                }
               
                con.Close();
            }                      
        
        }

        private void combo2()
        {
                Combobox2.Items.Clear();
                SqlCommand cmd1 = new SqlCommand("select * from information_schema.tables where table_catalog = '" + Combobox1.SelectedItem.ToString() + "'", con);
                con.Open();
                SqlDataReader dr = cmd1.ExecuteReader();
            if(dr.HasRows)
            {
                while (dr.Read())
                {
                    Combobox2.Items.Add(dr["table_name"].ToString());
                }
               
                con.Close();

            }          

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
        
        }
        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            combo1();
        } 
        private void Combobox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            combo2();
        }
    }
...
Рейтинг: 0 / 0
Combobox
    #39163584
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Это к какому комбобоксу относится?

ComboBox_SelectionChanged ?

2. В отладчике попадаете в цикл заполнения ?
Combobox1.Items.Add(dr["Name"].ToString());

3. Сделайте вызов combo1() на загрузке окна
...
Рейтинг: 0 / 0
Combobox
    #39163587
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тпотому, что фигню пишите, потому и не выводится. Читайте документацию

передавать набор значений надо в свойство ItemsSource,
Код: c#
1.
2.
3.
list = new List();
....
ComboBox1.ItemsSource = list;


Items - это не коллекция, а представление коллекции (ICollectionView), которая возвращает перечисление, она нужна для сортировки, фильтрации, обновления коллекции на лету, виртуализации и можно много еще как применять
Для автоматического поддержания Items в актуальном состонии лучше передавать на ItemsSource ObservableCollection<T>, тогда представление коллекции само подпишется на метод CollectionChanged и будет отражать актуальные данные данной коллекции, иначе прейдется после каждого обновления делать Refresh для данного View.
ICollectionView - это только интерфейс, существует множество представлений коллекции: ListCollectionView - самый распространенный из них, для каждой коллекции можно получить представление по умолчанию, с помощью метода CollectionViewSource.GetDefaultView
как только ты задашь свойство ItemsSource комбика нужной тебе коллекцией, внутри объект автоматически получит это представление по умолчанию, если это будет обычная коллекция, то представление будет ListCollectionView.
Но можно делать еще лучше. Можно прямо во ViewModel получать нужный ListCollectionView и передавать через связывание его на прямую (через инерфейс конечно). Это не нарушает принципов MVVM.

Так же следует отметить, что ListCollectionView должен быть создан в STA потоке приложения, а изменения вносимые в ObservableCollection<T>, тоже должны выполняться в том же потоке, иначе получите исключение. То есть работать с CollectionView нужно в потоке интерфейса, а вот получить коллекцию можно в любом другом потоке.


+ При переходе с WF на WPF необходимо ломать привычную систему размещения кода в CodeBehind , так же как и HTML5 и т.д. стоит поддерживаться принципа "Мухи и котлеты отдельно", иначе ни чего хорошего не вырастет :)
...
Рейтинг: 0 / 0
Combobox
    #39163593
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

я каждый раз читаю ваш термин WF как
Windows Workflow Foundation (WF)

;-)
...
Рейтинг: 0 / 0
Combobox
    #39163607
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так ладно не буду скакать, здесь продолжу:
сейчас все работает:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
    public partial class Window1 : Window
    {
        SqlConnection con = new SqlConnection("Data Source=192.168.1.114;Persist Security Info=True;User ID=sa;Password=Password1");

        public Window1()
        {
            InitializeComponent();
            combo1();
            combo2();
        }

        private void combo1()
        {
            Combobox1.Items.Clear();
            SqlCommand cmd = new SqlCommand("SELECT * FROM master.dbo.sysdatabases", con);
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Combobox1.Items.Add(dr["Name"].ToString());

                }

                con.Close();
            }

        }

        private void combo2()
        {
            SqlConnection con2 = new SqlConnection("Data Source=192.168.1.114;Initial Catalog= eco;Persist Security Info=True;User ID=sa;Password=Password1");
            Combobox2.Items.Clear();
            SqlCommand cmd1 = new SqlCommand("select * from information_schema.tables ", con2);
            con2.Open();
            SqlDataReader dr = cmd1.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Combobox2.Items.Add(dr["table_name"].ToString());
                }

                con2.Close();

            }

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

        }
        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
           
        }
        private void Combobox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            
        }
    }


Но работает чистая статика, мне нужно передать в SqlConnection значение из Combobox1.SelectedItem.ToString(), как это сделать, уже все перепробовал и глобальная переменная и отдельный метод ...
...
Рейтинг: 0 / 0
Combobox
    #39163633
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

Интересно, спасибо.
...
Рейтинг: 0 / 0
Combobox
    #39163653
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh,

Да, так и сделал.
...
Рейтинг: 0 / 0
Combobox
    #39163735
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да чтож за бред то такой, почему он все время null передает........:!!!!!!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Combobox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]