C# 如何在DataGrid WPF C中以编程方式选择和聚焦行#
我正在Visual Studio中使用WPF C# 并使用实体框架 我的DataGrid使用数据绑定SQL Server数据库中的表 当用户单击DataGrid中的一行时,该行将显示在文本框和组合框中 单击行的ID位于ID_文本框中C# 如何在DataGrid WPF C中以编程方式选择和聚焦行#,c#,wpf,visual-studio,datagrid,C#,Wpf,Visual Studio,Datagrid,我正在Visual Studio中使用WPF C# 并使用实体框架 我的DataGrid使用数据绑定SQL Server数据库中的表 当用户单击DataGrid中的一行时,该行将显示在文本框和组合框中 单击行的ID位于ID_文本框中 如何在TextBox中按id选择并聚焦一行我在完成TextBox的输入后按返回创建一个演示,以在DataGrid中显示selectedItem: Xaml代码是: <WrapPanel> <DataGrid x:Name="da
如何在TextBox中按id选择并聚焦一行我在完成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; }
}
公共部分类主窗口:窗口
{
ObservableCollection memberData=新的ObservableCollection();
公共主窗口()
{
初始化组件();
随机随机随机数=新随机数();
对于(int i=0;i<20;i++)
{
会员人数=新会员人数();
men.IndexNum=i;
男性。Id=“000”+i;
men.Age=radom.Next(100).ToString();
men.Name=“JOE”+i.ToString();
men.Email=newURI(“mailto:JOE”+i.ToString()+“+@school.com”);
成员数据。添加(男性);
}
dataGrid.DataContext=memberData;
}
private void dataGrid_SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
Member Member=dataGrid.SelectedItem作为成员;
myTxt.Text=member.Id.ToString();
}
私有void mytxtu KeyDown(对象发送方,KeyEventArgs e)
{
if(例如Key.ToString()=“Return”)
{
string strId=myTxt.Text;
Member=memberData.Where(m=>m.Id==strId.FirstOrDefault();
if(member==null)返回;
dataGrid.SelectedIndex=member.IndexNum;
DataGridRow行=(DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(member.IndexNum);
MoveFocus(新的遍历请求(FocusNavigationDirection.Next));
}
}
}
公共班级成员
{
public int IndexNum{get;set;}
公共字符串Id{get;set;}
公共字符串名称{get;set;}
公共字符串年龄{get;set;}
公共Uri电子邮件{get;set;}
}
它的工作原理如下:
ContainerFromIndex返回空值