Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Привязка DataSet к Combobox в гриде 
V
    Опции темы
RastaDja
Дата 20.7.2012, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Всем доброго времени суток!
Есть таблицы

project     eqipment
id                       id
idequipment      name
name


Связаные они по ключам project.idequipment  eqipment.id

В DataGrid нужно отобразить таблицу project, при этом idequipment должен отображатся, как выпадающий список с данными, которые записаны в eqipment.

Код

public partial class MainWindow : Window
    {
        static public dsProjectExpress dsData;
        static public string DataPath;

        // адаптеры для работы с данными
        static public dsProjectExpressTableAdapters.equipmentTableAdapter equipmentTA;
        static public dsProjectExpressTableAdapters.projectTableAdapter projectTA;

        public MainWindow()
        {
            InitializeComponent();

            dsData = new dsProjectExpress();
            // 
            // dsProjectExpress
            // 
            dsData.DataSetName = "dsProjectExpress";
            dsData.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;

            // загрузка данных
            equipmentTA = new dsProjectExpressTableAdapters.equipmentTableAdapter();
            equipmentTA.Fill(dsData.equipment);

            projectTA = new dsProjectExpressTableAdapters.projectTableAdapter();
            projectTA.Fill(dsData.project);

            taskGrid.DataContext = dsData;
        }
    }
}

Код

<DataGrid AutoGenerateColumns="False" Name="taskGrid"  ItemsSource="{Binding Path=project}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Наименование" Binding="{Binding Path=name}"/>
                
                <DataGridTemplateColumn Header="Оборудование">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="equipment" DisplayMemberPath="name" SelectedValuePath="id"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                                
                <DataGridTextColumn Header="Оборудование" Binding="{Binding Path=idequipment}"/>
            </DataGrid.Columns>
        </DataGrid>


Все мои попытки привязать данные к ComboBox не увенчались успехом.
Помогите пожалуйста в этом вопросе.

Это сообщение отредактировал(а) RastaDja - 20.7.2012, 09:38


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
BoomeR
Дата 23.7.2012, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.12.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



RastaDja, связь таблиц многие-к-одному (т.е. на один id_project приходится один id_equipment, а наоборот много)? Поясни тогда, что должно оказаться в ComboBox'e, если значение одно...
PM MAIL WWW ICQ Skype   Вверх
RastaDja
Дата 23.7.2012, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



BoomeR, отношение много (project.idequipment) к одному (eqipment.id).
DataGrid должен отобразить таблицу project, при этом поле idequipment должно отобразится в виде ComboBox, значения в котором берутся с equipment.name.

Пробовал
Код

<DataGridTemplateColumn Header="Оборудование">
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
       <ComboBox x:Name="equip" 
         ItemsSource="{Binding Path=DataContext.equipment}" 
         DisplayMemberPath="name" 
         SelectedValuePath="id"
         SelectedValue="{Binding idequipment}" />
     </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

и так
Код

<DataGridComboBoxColumn 
      ItemsSource="{Binding RelativeSource={RelativeSource Findancestor, AncestorType={x:Type Window}}, Path=DataContext.equipment}"
      DisplayMemberPath="name"
      SelectedValuePath="id"
      SelectedValueBinding="{Binding idequipment}">
</DataGridComboBoxColumn>


ничего не выходит

Единственный вариант, который позволил отобразить данные, это создание комбоколнки в коде. Но, почему это не работает в xaml разметке, мне непонимаю
Код

Binding bind = new Binding("equipment")
{
    Mode = BindingMode.TwoWay,
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
    ValidatesOnExceptions = true,
    ValidatesOnDataErrors = true
};
taskGrid.Columns.Add(new DataGridComboBoxColumn()
{
    Header = "Bla-bla",
    MinWidth = 100.0,
    ItemsSource = dsData.equipment,
    SelectedValuePath = "[0]",
    DisplayMemberPath = "[1]",
    SelectedValueBinding = bind
});


Я в замешательсте.  smile 


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
RastaDja
Дата 23.7.2012, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



user posted image

Это сообщение отредактировал(а) RastaDja - 23.7.2012, 16:00


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
RastaDja
Дата 24.7.2012, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Немогу понять, в чем проблема кроется
Код

<DataGrid Name="wtf" ItemsSource="{Binding Path=project}">
  <DataGrid.Columns>

    <DataGridComboBoxColumn x:Name="hoh" Header="Age" 
          ItemsSource="{Binding Path=equipment}" 
          DisplayMemberPath="name"
          SelectedValuePath="id"
          SelectedValueBinding="{Binding Path=idequipment}"/>
                
  </DataGrid.Columns>
</DataGrid>

ItemsSource не присваевается.
Но если написать в коде hoh.ItemsSource = dsData.equipment;
Данные отображаются.
Может кто-то знает в чем проблема, или есть догадки?
Тоесть - как правильно прописать ItemsSource?

Это сообщение отредактировал(а) RastaDja - 24.7.2012, 12:12


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
BoomeR
Дата 25.7.2012, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.12.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



RastaDja, снова я со своим занудством smile Никак не могу понять организацию БД. К примеру : есть проект "А" и на нем задействовано оборудование "1","2" и "3". В таблице Equipmnet n записей, три из них описывают оборудование "1","2" и "3". В таком случае для проекта "А" нужно создать три одинаковых строки с разными equip_id в таблице Project, верно?
PM MAIL WWW ICQ Skype   Вверх
RastaDja
Дата 25.7.2012, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



BoomeR, Нет. Есть проект "А", в котором нужно произвести, всего лишь, одно из перечисленых "1", "2", "3" и т.д. оборудований

Здесь главный вопрос в том, как прописать правильно ItemsSource. В коде получается, а в разметке - нет. Хочется использовать шаблоны, (в том числе DatePicker), а привязка не работает. Если кто-нибудь сталкивался, подскажите пожалуйста!

Это сообщение отредактировал(а) RastaDja - 25.7.2012, 15:19


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
BoomeR
Дата 26.7.2012, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.12.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



А явное указание таблиц данных не помогает?

Код

<DataGrid Name="wtf" ItemsSource="{Binding Path=project}">
  <DataGrid.Columns>
    <DataGridComboBoxColumn x:Name="hoh" Header="Age" 
          ItemsSource="{Binding Path=equipment}" 
          DisplayMemberPath="name"
          SelectedValuePath="id"
          SelectedValueBinding="{Binding Path=project.idequipment}"/>
                
  </DataGrid.Columns>
</DataGrid>

PM MAIL WWW ICQ Skype   Вверх
RastaDja
Дата 26.7.2012, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



Цитата(BoomeR @  26.7.2012,  09:19 Найти цитируемый пост)
А явное указание таблиц данных не помогает?

увы   smile 

Это сообщение отредактировал(а) RastaDja - 26.7.2012, 11:47


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0966 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.