Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / "Мультисилект" в comboBoxEdit / 25 сообщений из 46, страница 1 из 2
06.03.2012, 17:53
    #37694029
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Подскажите как программно выбрать записи из comboBoxEdit
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for (int i = 0; i < list_otdel.Items.Count; i++)
           {
            eform_sampling_Result record_list_Inst = list_otdel.Items[i] as eform_sampling_Result;
            if (record_list_Inst != null)
            {
           z_otdelDomainDataSource.Load();
           var record_Inst = ResourceWrapper.CurrentDomainContext.z_otdel_proc_Results.FirstOrDefault(r => r.indx ==record_list_Inst.eform);
           comboBoxOtdel.SelectedItem = record_Inst;
            }
         }


Данный код выбирает только последнюю запись.
...
Рейтинг: 0 / 0
06.03.2012, 18:26
    #37694092
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Chek_Fedor,

Увы, но программно ты сделать этого не сможешь.
Свойство Items (для листбокса это будет SelecedtItems), так вот свойство Items имеет только get в своем свойстве - http://msdn.microsoft.com/ru-ru/library/system.windows.controls.itemscontrol.items.aspx

А значит ты можешь только считывать несколько итемов (если в данный момент в комбобоксе выбраные более одного элемента). А вот программно установить не получится - так как нет модификатора set в свойстве Items
...
Рейтинг: 0 / 0
06.03.2012, 18:54
    #37694122
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
unknownfromrusChek_Fedor,

Увы, но программно ты сделать этого не сможешь.
Свойство Items (для листбокса это будет SelecedtItems), так вот свойство Items имеет только get в своем свойстве - http://msdn.microsoft.com/ru-ru/library/system.windows.controls.itemscontrol.items.aspx

А значит ты можешь только считывать несколько итемов (если в данный момент в комбобоксе выбраные более одного элемента). А вот программно установить не получится - так как нет модификатора set в свойстве Items

А это свойство имеет тип ItemCollection , который имеет методы Add , Remove и т.д. Низачет про сеттер коллекции. Кстати, как это относится к ComboBox, у которого только 1 элемент выбрать можно?

Chek_Fedor , можете подробнее объяснить?
...
Рейтинг: 0 / 0
06.03.2012, 18:57
    #37694130
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
unknownfromrus,

и, кстати, SelectedItems ListBox'а относятся к интерфейсу IList (тоже имеет методы Add и т.д.)
...
Рейтинг: 0 / 0
06.03.2012, 20:10
    #37694228
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Lelouch,

Не надо путать добавление объекта к коллекции - Add, с выбором из существующих обхектов в ComboBox (в коллекции). Это разные вещи.
...
Рейтинг: 0 / 0
06.03.2012, 20:12
    #37694231
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Lelouch,

Так метод Add тут работает шикарно. Про него я ничего плохого сказать не хочу.
ТЫ почитай внимательно что хочет чел.

Аdd - ДОБАВЛЯЕТ объект в коллецию.

У него стоит другая задача - из объектов существующей коллекции выбрать не один объект (как обычно бывает), а сразу несколько объектов (при условии, что у него при создании ComboBox выставлен соответсвующий параметр)
...
Рейтинг: 0 / 0
06.03.2012, 20:22
    #37694239
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Chek_Fedor,

Знаю как можно обойти это ограничение.
100% прокатит, если ComboBoxItem-ы у тебя созданы "руками" в XAML. У каждого ComboBox tcnm свойство SelectedItem (выставлять можно в XAML). Выставить можно либо true либо false.
Так вот, ты можешь сделать так:

SelectedItem-{Binding Path=Name, Converter=MyComverterToBool}

То есть мысль такая. Создаешь класс. Этот класс связываешь со своей коллецкией (откуда берешь данные, чтобы пихнуть в комбобокс).

Например, твой класс состоит из двух полей. Name и mybool.
Вот ты в своей коллекции выбираешь те эелементы (а значит и имена) которые должны быть отмечены в ComboBox. Если ты хочешь их отметить, то поле mybool делаешь равным true, а если нет - пусть остается false.

Далее твой конвертер будет цеплять этот класс и возвращать mybool. - то есть возвращать либо true либо false.

В итоге в COmboBoxItem в свойстве SelectedItem вымтавится нужное тебе значение.

Я подозреваю что аналогичную работу можно сделать и если в ComboBox данные попадают динамически. Так как никто тебе не мешает Binding сделать в коде (не в XAML).

Я надеюсь ты понял мою идею
...
Рейтинг: 0 / 0
06.03.2012, 21:56
    #37694326
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Есть много способов борьбы с этим:
- добавить в шаблон CheckBox c binding'ом к свойству IsSelected;
- спец behavior;
- etc.

Поскольку Федор с mvvm не дружит, то ему подойдет и такой вариант
...
Рейтинг: 0 / 0
06.03.2012, 22:15
    #37694340
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
SeVa,

Здарово))). Все верно, тоже хороший вариант.
А вообще как сказал Сева, вариантов тут можно сделать много - тут уже все зависит от фантазии автора))
...
Рейтинг: 0 / 0
06.03.2012, 22:35
    #37694360
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
unknownfromrusSeVa,

Здарово))). Все верно, тоже хороший вариант.
А вообще как сказал Сева, вариантов тут можно сделать много - тут уже все зависит от фантазии автора))
ЗЫ Последний вариант не будет работать из code-behind.

Гугли "multi-select listbox wpf". Вариантов много.
...
Рейтинг: 0 / 0
06.03.2012, 22:38
    #37694364
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
SeVa,

Сева, ты значит невнимательно прочитал мой пост))
Я же написал это еще раньше)) и объяснил почему. Ту ссылку которую ты дал -там тоже строится на том, что изначально пользователь ручками вбил итемы.

Я сам не проверял - я очень ленивый, но подозреваю, что из кода можно с этим бороться. Я как бы подкинул идею - в какую сторону копать. Осталось только включить голову и фантазию автору))
...
Рейтинг: 0 / 0
06.03.2012, 22:41
    #37694368
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
unknownfromrusSeVa,

Сева, ты значит невнимательно прочитал мой пост))
Я же написал это еще раньше)) и объяснил почему. Ту ссылку которую ты дал -там тоже строится на том, что изначально пользователь ручками вбил итемы.

Я сам не проверял - я очень ленивый, но подозреваю, что из кода можно с этим бороться. Я как бы подкинул идею - в какую сторону копать. Осталось только включить голову и фантазию автору))
Твой вариант с вбиванием гораздо проще делается с помощью шаблона с combobox, один раз задается и все.
...
Рейтинг: 0 / 0
12.03.2012, 10:06
    #37699969
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Дико извиняюсь, а можно поподробнее...
В "комбобокс" гружу записи из таблицы как же программно загрузить записи и присвоить им "true"
Код: sql
1.
2.
3.
4.
5.
<dxe:ComboBoxEdit Name="comboBoxOtdel" DisplayMember="name" ItemsSource="{Binding ElementName=z_otdelDomainDataSource, Path=Data}" PopupClosed="comboBoxOtdel_PopupClosed" Grid.Row="2" Margin="15,5,0,0" Width="240"  HorizontalAlignment="Left" Height="28" VerticalAlignment="Top" Grid.Column="1">
            <dxe:ComboBoxEdit.StyleSettings>
                <dxe:CheckedComboBoxStyleSettings />
            </dxe:ComboBoxEdit.StyleSettings>
        </dxe:ComboBoxEdit>
...
Рейтинг: 0 / 0
12.03.2012, 10:09
    #37699973
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
ComboBoxEdit Devexpress'овский
...
Рейтинг: 0 / 0
12.03.2012, 10:39
    #37700042
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Chek_Fedor,

А можешь код кинуть?
Не хочется руками новый пример вбивать.
...
Рейтинг: 0 / 0
12.03.2012, 10:56
    #37700071
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Два компонента ListBox и ComboBoxEdit
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 <dx:GroupFrame Header="Отделение" HorizontalAlignment="Left" Width="266" Height="171" VerticalAlignment="Bottom" Grid.Row="1" Grid.RowSpan="2" Grid.Column="1" Margin="0,0,0,6"></dx:GroupFrame>
        <dxe:ComboBoxEdit Name="comboBoxOtdel" DisplayMember="name" ItemsSource="{Binding ElementName=z_otdelDomainDataSource, Path=Data}" 
                          PopupClosed="comboBoxOtdel_PopupClosed" Grid.Row="2" Margin="15,5,0,0" Width="240" 
                          HorizontalAlignment="Left" Height="28" VerticalAlignment="Top" Grid.Column="1" 
            <dxe:ComboBoxEdit.StyleSettings>
                <dxe:CheckedComboBoxStyleSettings />
            </dxe:ComboBoxEdit.StyleSettings>
        </dxe:ComboBoxEdit>
        <ListBox Grid.Row="1" Height="120" HorizontalAlignment="Left" Name="list_otdel" VerticalAlignment="Bottom" Width="240" 
                 ItemsSource="{Binding Mode=OneWay, ElementName=eform_sampling_procDomainDataSource, Path=Data}" 
                 Margin="15,0,0,0"  DisplayMemberPath="name" Grid.Column="1" />


в ListBox грузятся данные каждый раз разные, в зависимости от выбранного параметра "Indx_spec" (меняется в зависимости от выбранной строки в некой Grid)

Код: sql
1.
2.
3.
   LoadOperation<eform_sampling_Result> loadeform_sampling = MainContext.Load(
                    MainContext.Geteform_samplingQuery(Indx_spec));
   list_otdel.ItemsSource = loadeform_sampling.Entities;


В ComboBoxEdit из процедуры (z_otdel_proc_Result)
Код: sql
1.
2.
3.
4.
 <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:z_otdel_proc_Result, CreateList=true}"
                                      Height="0" Name="z_otdelDomainDataSource" QueryName="Getz_otdel_procQuery" 
                                      Width="0"  DomainContext="{StaticResource DomainContext}" Margin="0,0,237,316">
        </riaControls:DomainDataSource>



Или мне сделать какой-нибудь тестовый вариант и взять таблицы из "NORTHWND"?
...
Рейтинг: 0 / 0
12.03.2012, 11:00
    #37700085
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Chek_Fedor,

Лучше код прикрепи - так будет быстрее и надежнее
...
Рейтинг: 0 / 0
12.03.2012, 11:24
    #37700142
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
unknownfromrus,

и еще сами dll от devex :) а то не запустит никто.
...
Рейтинг: 0 / 0
12.03.2012, 12:11
    #37700268
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Что-то типа такого. Правда у меня база NORTHWND "крутится" на MSSQL добавил хранимую процедуру "ProcedureName"
для наглядности
Код: sql
1.
2.
3.
4.
5.
SELECT [CategoryID]
      ,[CategoryName]
      ,[Description]
      ,[Picture]
  FROM [NORTHWND].[dbo].[Categories] where CategoryID in (1,2,3)


Только вот я 6 "метров" сюда не вылажу может mail дадите? Или могу только код без DLL хотя он приведен выше.
...
Рейтинг: 0 / 0
12.03.2012, 12:32
    #37700339
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
unknownfromrus, отправил Вам на mail указанном на форуме
...
Рейтинг: 0 / 0
12.03.2012, 13:42
    #37700541
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
"Забил" в xaml значения для "лист и комбо боксов", думаю если подскажите как при нажатии на кнопку выбрать соответствующие значения в "КомбоБоксе" проблема решится. До нажатия
после нажатия
...
Рейтинг: 0 / 0
12.03.2012, 13:46
    #37700558
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
xaml
Код: sql
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.
<UserControl x:Class="SilverlightApplication9.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" 
    xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

    <Grid x:Name="LayoutRoot" Background="White">
        <dxe:ComboBoxEdit HorizontalAlignment="Left" Margin="40,246,0,0" Name="comboBoxEdit1" VerticalAlignment="Top" 
                          Width="283" >
            <dxe:ComboBoxEdit.StyleSettings>
                <dxe:CheckedComboBoxStyleSettings />
            </dxe:ComboBoxEdit.StyleSettings>
            <dxe:ComboBoxEdit.Items>
                <dxe:ComboBoxEditItem>Item#1</dxe:ComboBoxEditItem>
                <dxe:ComboBoxEditItem>Item#2</dxe:ComboBoxEditItem>
                <dxe:ComboBoxEditItem>Item#3</dxe:ComboBoxEditItem>
                <dxe:ComboBoxEditItem>Item#4</dxe:ComboBoxEditItem>
            </dxe:ComboBoxEdit.Items>
        </dxe:ComboBoxEdit>
        <dxe:ListBoxEdit Height="200" HorizontalAlignment="Left" Margin="41,47,0,0" Name="listBoxEdit1" 
                         VerticalAlignment="Top" Width="283" SelectionMode="Multiple">
            <dxe:ListBoxEdit.Items>
                <dxe:ListBoxEditItem Content="Item#1" />
                <dxe:ListBoxEditItem Content="Item#3" />
            </dxe:ListBoxEdit.Items>
        </dxe:ListBoxEdit>
        <Button Content="Выбрать данные из ListBox" Height="23" HorizontalAlignment="Left" 
                Margin="40,12,0,0" Name="button1" VerticalAlignment="Top" Width="179" Click="button1_Click" />
        <sdk:Label Height="23" HorizontalAlignment="Left" Margin="232,12,0,0" Name="label1" VerticalAlignment="Top" Width="156" />
    </Grid>
</UserControl>
...
Рейтинг: 0 / 0
12.03.2012, 15:36
    #37700863
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Chek_Fedor,

Сори за мою невнимательность.
Еще раз перечитал первое сообщение твое.

Невнимательность моя была в том, что в ListBox есть свойство SelectionMode - именно оно в LISTBOX позволяет выбирать несколько эелментов.
В ComboBox оказывается такого нет.

Поэтому не вижу проблемы вытащить программно один единственный выбранный пункт.
Если хочешь работать так, чтобы была возможность выбирать несколько пунктов - можно посадить ListBox в что-то вроде Expander (не помню всех названий выпадающих эелементов).

Можешь еще раз описать чего ты ождаешь вообще и что именно ты хочешь от ComboBox
...
Рейтинг: 0 / 0
12.03.2012, 15:58
    #37700914
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Chek_Fedor,

Хотел добавить в последнем сообщении, что тебе ничего не мешает в WPF из ListBox сделать ComboBox
...
Рейтинг: 0 / 0
12.03.2012, 16:10
    #37700954
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Мультисилект" в comboBoxEdit
Нужно выбрать несколько элементов в ComboBox которые загружены в ListBox
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / "Мультисилект" в comboBoxEdit / 25 сообщений из 46, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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