如何将当前登录用户的ID记录到文本框中

时间:2014-03-27 16:27:08

标签: c# wpf datagrid

我试图从c#wpf app中的datagrid第一行获取数据,但我无法弄清楚代码。

有人能帮助我吗?

我尝试了WF应用程序代码,但由于没有.Rows

的功能,因此无效
return Convert.ToInt32(dataGridView1.Rows[dataGridView1.CurrentRow.Index]
          .Cells[0].Value.ToString());

由于

更新

我试图让当前登录的用户ID显示在文本框中,因此我可以使用它来稍后进行预订并加入两个表。

也可以有人帮助编写加入两个不同id的SQL语句(用户购买的书的用户ID和id到一个名为“预订”的新表中

有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

由于其他人已经针对您的问题发布了潜在的解决方法,我将继续解释正确的解决方案:

删除所有代码并重新开始。

WPF不是winforms,如果你正在使用WPF,你需要留下你从传统方法中获得的任何和所有概念,并理解并拥抱The WPF Mentality

基本上,您不会在WPF中“从DataGrid获取数据”,只是因为UI is NOT Data

这意味着您尝试获取的数据不得由UI 存储以开始。相反,您需要创建正确的数据模型并使用DataBinding使用DataModel中的此类数据填充UI。

用户界面的责任是显示数据,而不是存储数据。这是传统方法的重要转移,您可以使用数据手动填充UI,然后从UI检索数据。

WPF双向数据绑定功能使得以干净,分离的方式实现此类场景变得更加容易。

假设您有一个具有NameId属性的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}" />