我试图从c#wpf app中的datagrid第一行获取数据,但我无法弄清楚代码。
有人能帮助我吗?
我尝试了WF应用程序代码,但由于没有.Rows
的功能,因此无效return Convert.ToInt32(dataGridView1.Rows[dataGridView1.CurrentRow.Index]
.Cells[0].Value.ToString());
由于
更新
我试图让当前登录的用户ID显示在文本框中,因此我可以使用它来稍后进行预订并加入两个表。
也可以有人帮助编写加入两个不同id的SQL语句(用户购买的书的用户ID和id到一个名为“预订”的新表中
有人能帮助我吗?
答案 0 :(得分:2)
由于其他人已经针对您的问题发布了潜在的解决方法,我将继续解释正确的解决方案:
删除所有代码并重新开始。
WPF不是winforms,如果你正在使用WPF,你需要留下你从传统方法中获得的任何和所有概念,并理解并拥抱The WPF Mentality。
基本上,您不会在WPF中“从DataGrid获取数据”,只是因为UI is NOT Data。
这意味着您尝试获取的数据不得由UI 存储以开始。相反,您需要创建正确的数据模型并使用DataBinding使用DataModel中的此类数据填充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首选的专业方法。我建议您阅读所有链接的文档,并尝试更多地熟悉这种方法。
答案 1 :(得分:0)
例如,如果您使用DataGrid
填充List<SomeObject>
,请尝试以下操作:
var row = ((SomeObject)DataGrid1.Items[0]);
只需将项目强制转换为类类型,然后访问其中的属性即可。您可能需要进行检查以确保在访问Items[0]
之前网格中显示了某些内容。
您可以对网格中的不同列进行排序,这将始终抓取顶部显示的记录。
编辑:
当我点击DATAGRID中的第一行时,此功能应/必须在数据网格下方的文本框中显示用户ID。就是这样。
您可以直接绑定到网格,从当前选定的行显示所需的属性。
<DataGrid x:Name="DataGrid1" />
<TextBox Text="{Binding ElementName=DataGrid1, Path=SelectedItem.UserId}" />