c# - 如何在 DataGrid WPF C# 中以编程方式选择和聚焦一行
问题描述
我在 Visual Studio 中使用 WPF C# 并使用实体框架
我的 DataGrid 将 SQL Server 数据库中的表与数据绑定
当用户单击 DataGrid 中的一行时,该行将显示在文本框和组合框中
单击的行的 ID 在 ID_TextBox 中
如何在 TextBox 中按 id 选择并关注一行
解决方案
Return
在完成 TextBox 的输入后,我创建了一个演示,以在 DataGrid 中显示 selectedItem:
Xaml 代码是:
<WrapPanel>
<DataGrid x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" SelectionMode="Extended" SelectionUnit="FullRow" SelectionChanged="dataGrid_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Width="80" Binding="{Binding Id}" IsReadOnly="True" />
<DataGridTextColumn Header="Name" Width="80" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Age" Width="50" Binding="{Binding Age}" />
<DataGridHyperlinkColumn Header="Email" Width="150"
Binding="{Binding Email}"/>
</DataGrid.Columns>
</DataGrid>
<StackPanel>
<TextBox Name="myTxt" Text="{Binding Name}" Width="120" Height="40" Background="Azure" KeyDown="myTxt_KeyDown" />
</StackPanel>
</WrapPanel>
cs代码是:
public partial class MainWindow : Window
{
ObservableCollection<Member> memberData = new ObservableCollection<Member>();
public MainWindow()
{
InitializeComponent();
Random radom = new Random();
for (int i = 0; i < 20; i++)
{
Member men = new Member();
men.IndexNum = i;
men.Id = "000"+i;
men.Age = radom.Next(100).ToString();
men.Name = "JOE" + i.ToString();
men.Email = new Uri("mailto:JOE" + i.ToString() + "+@school.com");
memberData.Add(men);
}
dataGrid.DataContext = memberData;
}
private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Member member = dataGrid.SelectedItem as Member;
myTxt.Text = member.Id.ToString();
}
private void myTxt_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key.ToString() == "Return")
{
string strId = myTxt.Text;
Member member = memberData.Where(m => m.Id == strId).FirstOrDefault();
if (member == null) return;
dataGrid.SelectedIndex = member.IndexNum;
DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(member.IndexNum);
row.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
}
public class Member
{
public int IndexNum { get; set; }
public string Id { get; set; }
public string Name { get; set; }
public string Age { get; set; }
public Uri Email { get; set; }
}
推荐阅读
- android - 为什么我的应用程序在 Android Studio (Kotlin Multiplatform) 上模拟时由于 Null ImageView 而崩溃?
- machine-learning - sklearn.model_selection.TimeSeriesSplit 中的差距参数
- java - Mockito 对象映射器测试
- javascript - 我不能在我的 html 脚本中使用 require,谁能回答为什么?
- eslint - Eslint 无法加载在 '.eslintrc' 中声明的插件 'security':找不到模块 'eslint-plugin-security'
- android - 单击按钮时的Android改造重试请求
- angular - 我的过滤器不能在有角度的垫子上工作
- python - 删除列表中的重复项
- javascript - fetch() 如何工作?
- php - 如果产品表中存在品牌 ID,则从品牌表中获取品牌 ID 名称