2011-08-01 48 views
2

我對VB.net和WPF(以及一般編程)相當陌生,所以請耐心等待。我試圖爲我的企業編寫一個有用的數據庫應用程序作爲學習項目。我在WinForms中做了一個草稿,指的是(非常好的)Murach書,但我現在試圖用WPF UI和更乾淨的代碼重新編寫它。有沒有簡單的方法綁定到WPF中的父行?

我想我理解WPF綁定的基礎知識,但是我正試圖找到一種簡單的綁定父母細節的方式 - 我會認爲這是一個非常基本的方案,但我找不到任何東西在上面。例如,假設我有

  • a'客戶'表與客戶ID,名稱,各種聯繫人詳細信息,然後是外鍵CityID和GroupID;
  • 具有CityID,CityName和外鍵StateID的'City'表;
  • 帶狀態ID,狀態名的'狀態'表;
  • 一個「組」表與組ID,組名等

...有一個強類型數據集,包括關係和一堆的TableAdapter的。

在這種情況下,我想要做的就是顯示特定客戶的詳細信息(當用戶輸入其CustomerID時)。我可以很容易地綁定到'Customers'表中的數據,但是如何使用綁定從相關表中檢索CityName,StateName和GroupName?下面是一個部分示例。

...

<Window.Resources> 
    <CollectionViewSource x:Key="CustomersViewSource" 
          Source="{Binding Path=Customers,Source={StaticResource CustomersDataSet}}" /> 
</Window.Resources> 
<Grid DataContext="{Binding Source={StaticResource CustomersViewSource}}"> 
    <TextBox Name="customerName" Text="{Binding Path=Name}" /> 
    <TextBox Name="customerPhone" Text="{Binding Path=PhoneNumber}" /> 
</Grid> 
<Grid> 
    <Label Name="lblGroup" Content="[needs to bind to GroupName]"> 
    <Label Name="lblCity" Content="[needs to bind to CityName]"> 
</Grid> 

我已經上設置主/從場景,這是簡單的讀條,這樣我就可以綁定到客戶一個DataGrid的選擇的城市,例如,通過使用外鍵作爲客戶控制的綁定路徑。在這裏,我試圖以另一種方式做到這一點,但是,根據選定的客戶查找父級詳細信息。任何人都可以將我推向正確的方向嗎?

如果沒有這個,我只能通過VB來做到這一點 - 它很討厭。假設我已經創建了一個CustomerViewSource並查閱了相關客戶,並在我的數據集填寫各種表格,這樣的事情:

Dim rowCustomer As System.Data.DataRowView = CustomerViewSource.View.CurrentItem 
Dim drCustomer As System.Data.Datarow = rowCustomer.Row 
Dim drGroup as drCustomer.GetParentRow("FK_Customers_Groups") 
lblGroup.Content = drGroup.Item("GroupName") 

我不應該這樣做,所以笨拙雖然.. 。 我是不是該?

還有一件事:目前我通過使用tableadapter上的參數化查詢填充數據集來選擇客戶,例如,

SELECT CustomerID, CustomerName 
FROM Customers 
WHERE CustomerID = @CustomerID 

然後只是移動到第一個記錄(因爲將只有一個)。這是尋找客戶的常規方法嗎?我也可以使用這種方法,從我的客戶行中獲取外鍵,並使用參數化查詢填充數據集中的不同表格,然後分別綁定到每個表格 - 但又一次,看起來非常混亂。

任何有關這個問題的幫助,甚至一般的建議,非常感謝。如果我還不夠清楚(或提供了很好的例子),很高興進一步解釋。乾杯。

回答

1

首先,這些實際上是子行,而不是父行。這有點違反直覺,但父母是一對多關係中的「一方」,孩子是「多」,所以集團,城市和州都是客戶的父母。你的代碼示例顯示了這一點

接下來,在ADO.NET中,您可以通過在Customer DataTable中創建一個DataColumn並設置其表達式來完成您嘗試在此處執行的所有操作。創建一個名爲StateName的列,並將其表達式設置爲Parent(FK_Customers_States).StateName。現在,您可以將其綁定到任何其他列的方式進行綁定。

+0

非常好,謝謝羅伯特,我根本不知道表達式,這正是我需要知道的。也許我應該退後一步,確保在我開始編程之前,我會更加深入地瞭解ADO.NET。是的,我知道哪些是與父母/孩子,可能只是沒有說得對。乾杯。 –

相關問題