Привязка DataSet к Combobox в гриде

 
0
 
.NET
ava
RastaDja | 20.07.2012, 10:20
Всем доброго времени суток!
Есть таблицы

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 не увенчались успехом.
Помогите пожалуйста в этом вопросе.
Comments (8)
ava
BoomeR | 23.07.2012, 08:27 #
RastaDja, связь таблиц многие-к-одному (т.е. на один id_project приходится один id_equipment, а наоборот много)? Поясни тогда, что должно оказаться в ComboBox'e, если значение одно...
ava
RastaDja | 23.07.2012, 15:30 #
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
ava
RastaDja | 23.07.2012, 15:58 #
user posted image
ava
RastaDja | 24.07.2012, 12:08 #
Немогу понять, в чем проблема кроется

<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?
ava
BoomeR | 25.07.2012, 08:45 #
RastaDja, снова я со своим занудством smile Никак не могу понять организацию БД. К примеру : есть проект "А" и на нем задействовано оборудование "1","2" и "3". В таблице Equipmnet n записей, три из них описывают оборудование "1","2" и "3". В таком случае для проекта "А" нужно создать три одинаковых строки с разными equip_id в таблице Project, верно?
ava
RastaDja | 25.07.2012, 12:22 #
BoomeR, Нет. Есть проект "А", в котором нужно произвести, всего лишь, одно из перечисленых "1", "2", "3" и т.д. оборудований

Здесь главный вопрос в том, как прописать правильно ItemsSource. В коде получается, а в разметке - нет. Хочется использовать шаблоны, (в том числе DatePicker), а привязка не работает. Если кто-нибудь сталкивался, подскажите пожалуйста!
ava
BoomeR | 26.07.2012, 08:19 #
А явное указание таблиц данных не помогает?


<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>
ava
RastaDja | 26.07.2012, 11:23 #
Цитата (BoomeR @ 26.7.2012, 09:19 findReferencedText)
А явное указание таблиц данных не помогает?

увы smile
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit