"OldEthereal" <12722@users.rsdn.ru> schrieb im Newsbeitrag
news:3806091@news.rsdn.ru...
> Добрый вечер.
>
> Подскажите, как организовать вывод вместо айди имени из родительской
> таблицы. Читал все, что нашел похожего, но так ничего и не понял.
> Имеем датасет с двумя таблицами, например, employee(id, first_name,
> last_name, firm_id) и firm(id, firm_name). Есть соответствующий foreign
> key в таблице employee.
> Таблица employee привязана к ListView, в нем GridView и созданы
> GridViewColumn для каждой колонки. Как в колонке для поля firm_id вывести
> firm_name?
>
> Датасет не strong typed. Сделать все нужно не в XAML, а в коде. Меня бы
> удовлетворило даже решение типа Path=Row.firmRow, но не типизированный
> датасет. Никак не соображу
Самое простое решение "expression column", напр. так:
[XAML]
<Window x:Class="MainWindow"
xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" xmlns:my="clr-namespace:WpfApplication1"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase">
<Window.Resources>
<my:ViewModel x:Key="vm" />
<CollectionViewSource Source="{Binding Source={StaticResource vm},
Path=DT}" x:Key="cvs">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="master"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
<DataTemplate x:Key="dt">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding colC}"/>
<TextBox Text="{Binding master, Mode=OneWay}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<StackPanel DataContext="{Binding Source={StaticResource vm}}">
<ListView ItemsSource="{Binding Source={StaticResource cvs}}"
ItemTemplate="{Binding Source={StaticResource dt}}" />
</StackPanel>
</Window>
[/XAML]
ViewModel:
Imports System.Data
Public Class ViewModel
Private m As New Model
Public Sub New()
' Add relation
m.DS.Relations.Add(New DataRelation("rel1",
m.DS.Tables("Master").Columns("ID"), m.DS.Tables("Child").Columns("FK")))
' Add expression column
m.DS.Tables("Child").Columns.Add("master", GetType(String),
"parent(rel1).colM")
' Set Property DT
DT = m.DS.Tables("Child")
End Sub
Public Property DT As DataTable
End Class
Model
Imports System.Data
Public Class Model
Public Property DS As New DataSet
Public Sub New()
' Generate Master-Demo-records
DS.Tables.Add(New DataTable("Master"))
With DS.Tables("Master")
With .Columns
With .Add("ID", GetType(Integer))
.AutoIncrement = True
.AutoIncrementSeed = 1
.AutoIncrementStep = 1
End With
.Add("colM", GetType(String))
End With
For i = 1 To 9
Dim r As DataRow = .NewRow
r.Item("colM") = "Master " & i.ToString
.Rows.Add(r)
Next
End With
' Generate Child-Demo-records
DS.Tables.Add(New DataTable("Child"))
With DS.Tables("Child")
With .Columns
With .Add("ID", GetType(Integer))
.AutoIncrement = True
.AutoIncrementSeed = 1
.AutoIncrementStep = 1
End With
.Add("FK", GetType(Integer))
.Add("colC", GetType(String))
End With
Dim rnd As New Random
For i = 1 To 20
Dim r As DataRow = .NewRow
r.Item("FK") = rnd.Next(1, 9)
r.Item("colC") = "Child " & i.ToString
.Rows.Add(r)
Next
End With
End Sub
End Class
--
Peter
Posted via RSDN NNTP Server 2.1 beta