【发布时间】:2011-03-09 09:48:13
【问题描述】:
您好,我刚刚升级到 Framework 4.0,并在我的数据库中添加了关系外键。我想加入 2 个表 User and Staff 并返回 UI。员工表具有 UserId。不得不说,每当在 datagridview 上单击用户名时,我都想向所有文本框显示用户和员工数据。
我使用元组来做这个
public IEnumerable<Tuple<User, Staff>> Get()
{
using (qDataContext db = new qDataContext())
{
try
{
var r = from u in db.Users
join s in db.Staffs on u.Id equals s.UserId
select new Tuple<User, Staff>(u, s);
return r;
}
catch (Exception ex)
{
throw;
}
}
}
但是在 UI 中,我应该如何进行绑定?
gvUser.DataSource = user.Get();
仅供参考,gridview 只是显示用户名。员工表将存储密码、加入日期的字段..
顺便说一句,我还需要加入表吗,因为我已经为表添加了外键引用。我认为它应该足够聪明,可以返回给我 User.Staff.Password
编辑
这是我发现的。。
我已将关系外键添加到我的数据库中。
并且下面的代码已经能够返回我的用户和员工数据,因为 Staff.UserId 指向 UserId
And i don have to use the TUPLE to return those object :)!!
public IEnumerable<User> Get()
{
using (ZebraDataContext db = new ZebraDataContext())
{
try
{
var r = from u in db.Users
select u;
//join s in db.Staffs on u.Id equals s.UserId
//select new Tuple<User, Staff>(u, s);
return r.ToList();
}
catch (Exception ex)
{
throw;
}
}
}
但是,当我绑定到 GUI datagridview 时,我遇到了麻烦。
private void InitializeData()
{
gvUser.DataSource = user.Get();
}
此代码能够向我显示用户数据。但是当我执行gvUser_RowEnter 时如何取回员工数据?
private void gvUser_RowEnter(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex
foreach (DataGridViewRow row in gvUser.SelectedRows)
{
User user = row.DataBoundItem as User;
txtName.Text = user.Name;
txtAddress.Text = user.Address;
txtPhone.Text = user.Phone;
txtPhone2.Text = user.Phone2;
txtRemark.Text = user.Remarks;
txtPassword.Text = user.Staffs.First().Password;
}
}
txtPassword.text = user.Staffs.First().Password
当我在 User 中添加 watch Staff 对象时。我可以看到隐藏的数据 ((User)(row.DataBoundItem)).Staffs.entities.Items 这有员工数据..
【问题讨论】:
标签: c# visual-studio-2010 linq-to-sql c#-4.0