Я довольно новичок в VB.net и WPF (и программировании в целом), поэтому, пожалуйста, потерпите меня.Я пытаюсь написать полезное приложение для базы данных для своего бизнеса в качестве учебного проекта.Я сделал черновик в WinForms, ссылаясь на (очень хорошую) книгу Мурача, но сейчас пытаюсь переписать ее с помощью пользовательского интерфейса WPF и более чистого кода.
Мне кажется, я понимаю основы связывания WPF,но я рву свои волосы, пытаясь найти простой способ привязки к родительским деталям - что я бы посчитал очень простым сценарием, но я ничего не могу найти на нем.Например, допустим, у меня есть
- таблица «Клиенты» с CustomerID, именем, различными контактными данными, а затем внешними ключами CityID и GroupID;
- таблица «City» с CityID, CityName и внешний ключ StateID;
- таблица 'State' с StateID, StateName;
- a таблица 'Groups' с GroupID, GroupName и т. Д.
.... со строго типизированным набором данных, включающим отношения и набор табличных адаптеров.
Все, что я хочу сделать в этом случае, - это отобразить детали для конкретного клиента (когда пользователь ввел свой идентификатор клиента).Я легко могу связать данные в таблице «Клиенты», но как мне использовать привязки для извлечения 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>
Я читал статьи о настройке основных / подробных сценариев, что довольно просто, поэтому я мог связать клиентов в сетку данных для выбранного города, например, используя внешний ключкак обязательный путь для контроля клиента.Здесь я пытаюсь сделать это в обратном направлении, хотя, ища родительские детали на основе выбранного клиента.Кто-нибудь может подтолкнуть меня в правильном направлении?
Если это не удастся, я смог сделать это только через 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")
Хотя мне не следовало бы делать это так неуклюже ...я должен?
Еще одна вещь: в данный момент я выбираю клиента, заполняя набор данных с помощью параметризованного запроса к адаптеру таблицы, например,
SELECT CustomerID, CustomerName
FROM Customers
WHERE CustomerID = @CustomerID
, а затем просто перехожу кпервая запись (так как будет только одна).Это нормальный метод поиска клиента?Я также мог бы использовать этот метод, получая внешние ключи из строки моего клиента и заполняя различные таблицы в наборе данных, используя параметризованные запросы, а затем просто привязывая их к каждой таблице в отдельности - но опять-таки, кажется очень грязным.
AnyПомощь с этой проблемой, или даже общие советы, очень ценю.Если я не был достаточно ясен (или предоставил хорошие примеры), с удовольствием объясню дальше.Приветствия.