基于数据网格中的选定记录填充文本框
本文关键字:记录 填充 文本 于数据 数据 网格 | 更新日期: 2023-09-27 18:35:13
使用 MVVM 模式编写 WPF 应用程序。 我有一个绑定到数据模型的数据网格,它为搜索词创建数据集合。 我在数据网格中显示的字段之一是唯一的参考编号。 当我单击数据网格中的记录时,我想用有关使用该人员的参考编号选择的人员的额外数据填充一些文本框。
这是我的数据网格的 xaml:
<Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4" >
<DataGrid x:Name="dgPersonal" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding UserSearchCollection}" RowDetailsVisibilityMode="VisibleWhenSelected" IsReadOnly="True" IsSynchronizedWithCurrentItem="True">
<DataGrid.Columns>
<DataGridTextColumn Width="50" x:Name="RefNo" Binding="{Binding RefNo}" Visibility="Hidden" />
<DataGridTextColumn Header="Name" Width="125" x:Name="FullName" Binding="{Binding FullName, Mode=OneWay}" />
<DataGridTextColumn Header="Phone" Width="75" x:Name="Voice" Binding="{Binding Voice}" />
<DataGridTextColumn Header="Preferred First Name" Width="125" x:Name="FirstName" Binding="{Binding PreferredFirstName}" />
<DataGridTextColumn Header="Preferred Last Name" Width="125" x:Name="LastName" Binding="{Binding PreferredLastName}"/>
<DataGridTextColumn Header="DOS" Width="90" x:Name="DateOfSeparation" Binding="{Binding DateOfSeparation, StringFormat=M/d/yyyy}" SortMemberPath="DateOfSeparation" />
</DataGrid.Columns>
</DataGrid>
</Grid>
这是从我的视图模型进行搜索的代码 如果(字符串。IsNullOrWhiteSpace(SearchString)) 返回;
var search = dal.PersonalRepository.GetAll();
if ( Regex.IsMatch(SearchString, @"^('(?'d{3}?')?)?[-'.'s]?'d{3}[-'.'s]?'d{4}$") )
search = phoneSearch(search);
else if (Regex.IsMatch(SearchString, @"^r?'d+$"))
search = refNoSearch(search);
else if (Regex.IsMatch(SearchString, @"^e?['C'||'c']'d+$"))
search = empIdSearch(search);
else if (Regex.IsMatch(SearchString, @"^('w'd{2}|'wDC|O'w{2})('w{4})$"))
search = casCodeSearch(search);
else
search = nameSearch(search);
if (!ShowSeparatedUsers)
search = search.Where(x => x.DateOfSeparation == null);
// .Where(p => p.FirstName.Trim().Contains(_searchParam1) && p.LastName.Trim().Contains(_searchParam2)
// ||
// (p.FirstName.Trim().Contains(_searchParam2) && p.LastName.Trim().Contains(_searchParam1))
UserSearchCollection = new ObservableCollection<User>(search.Select(x => new User {
RefNo = x.RefNo,
Voice = x.Voice.Trim(),
FirstName = x.FirstName.Trim(),
LastName = x.LastName.Trim(),
PreferredFirstName = x.PreferredFirstName.Trim(),
PreferredLastName = x.PreferredLastName.Trim(),
DateOfSeparation = x.DateOfSeparation,
EmployeeId = x.EmployeeId.Trim()
}).ToList());
IsSearched = true;
我的模型称为用户,这就是它的样子
public class User : ObservableObject
{
public int RefNo { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Suffix { get; set; }
public string PreferredLastName { get; set; }
public string PreferredFirstName { get; set; }
public string Exemptions { get; set; }
public string Voice { get; set; }
public DateTime? DateOfSeparation { get; set; }
public string EmployeeId { get; set; }
public string Caspar { get; set; }
public string Exempt { get; set; }
public string City { get; set; }
public string Title { get; set; }
public string Budcat { get; set; }
public string Posnno { get; set; }
public string Rptto { get; set; }
public string Cascode { get; set; }
public string Budorg { get; set; }
public string NTE { get; set; }
public string FullName {
get {
return Utils.FormatFullName(LastName, FirstName, Suffix, PreferredLastName, PreferredFirstName,
Exemptions);
}
}
}
这是在数据网格中选择人员时要用数据填充的文本框之一的示例。
<TextBox Style="{StaticResource textboxStyleBlue}" Grid.Row="1" Grid.Column="1" Width="200" IsReadOnly="True" />
可以使用绑定到 DataGrid.SelectedItem:
- 为数据网格指定名称:x:名称="网格"
- 设置文本框文本={绑定元素名称=网格,路径=选定项.姓}
我认为,这应该对你有用。