![](/img/trans.png)
[英]Xamarin.Forms how to access the current logged in user's Id and other information?
[英]How to current logged in user's id to textbox
我试图从c#wpf app中的datagrid的第一行获取数据,但我无法弄清楚代码。
有人能帮助我吗?
我尝试了WF应用程序代码,但它不起作用,因为它没有.Rows的功能
return Convert.ToInt32(dataGridView1.Rows[dataGridView1.CurrentRow.Index]
.Cells[0].Value.ToString());
谢谢
更新:
我试图获取当前登录的用户ID以显示在文本框中,因此我可以使用它来稍后进行预订并加入两个表。
也有人可以帮助编写加入两个不同id的SQL语句(用户购买的书的用户ID和id到一个名为“预订”的新表中)
有人能帮助我吗?
由于其他人已经为您的问题发布了潜在的解决方法,我将继续解释正确的解决方案:
删除所有代码并从头开始。
WPF不是winforms,如果你正在使用WPF,你需要留下你从传统方法中获得的任何和所有概念,并理解并接受WPF心态 。
基本上,您不会在WPF中“从DataGrid获取数据”,因为UI不是数据 。
这意味着您尝试获取的数据不能由UI 存储开始。 相反,您需要创建一个正确的数据模型,并使用DataBinding使用DataModel中的此类数据填充UI。
UI的职责是显示数据,而不是存储数据。 这是传统方法的重要转移,您可以使用数据手动填充UI,然后从UI检索数据。
WPF双向数据绑定功能使得以干净,分离的方式实现此类方案变得更加容易。
假设您有一个具有Name
和Id
属性的User类:
public class User
{
public int Id {get;set;}
public string Name {get;set;}
}
在DataGrid中显示此内容的第一步是创建一个包含此类集合的正确ViewModel :
public class ViewModel
{
public ObservableCollection<User> Users {get; private set;}
public ViewModel()
{
Users = new ObservableCollection<User>();
//... Populate the collection here.
}
}
那么您将使用此类作为UI的DataContext :
//Window's constructor
public MainWindow()
{
InitializeComponent();
//Here we set the DataContext:
DataContext = new ViewModel();
}
最后,在XAML中创建正确的DataBinding:
<DataGrid ItemsSource="{Binding Users}"
x:Name="DataGrid"/>
<!-- ... -->
<TextBox Text="{Binding SelectedItem.Id, ElementName=DataGrid}"/>
请注意我是如何使用ElementName绑定将TextBox直接绑定到DataGrid的。
这是WPF首选的专业方法。 我建议您阅读所有链接的文档,并尝试更熟悉这种方法。
例如,如果要使用List<SomeObject>
填充DataGrid
,请尝试以下操作:
var row = ((SomeObject)DataGrid1.Items[0]);
只需将项目强制转换为您的类类型,然后访问它上面的属性。 您可能需要检查以确保在访问Items[0]
之前网格中显示了某些内容。
您可以对网格中的不同列进行排序,这将始终获取顶部显示的记录。
在看到以下评论后编辑 :
当我点击DATAGRID中的第一行时,此功能应/必须在数据网格下方的文本框中显示用户ID。 就这些。
您可以直接绑定到网格,以从当前选定的行显示所需的属性。
<DataGrid x:Name="DataGrid1" />
<TextBox Text="{Binding ElementName=DataGrid1, Path=SelectedItem.UserId}" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.