привет, я только что обновился до Framework 4.0 и добавил внешний ключ отношений в свою базу данных. Я хотел бы присоединиться к таблице 2 User and Staff
и вернуться обратно в пользовательский интерфейс. Таблица персонала имеет идентификатор пользователя. Надо сказать, что всякий раз, когда имя пользователя нажимается на сетке данных, я хотел бы отобразить данные о пользователе и персонале для всего текстового поля.
Я делаю это, используя Tuple
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;
}
}
}
Но в интерфейсе, как мне сделать привязку?
gvUser.DataSource = user.Get();
К вашему сведению, в gridview просто отображается имя пользователя. В таблице персонала будут храниться пароли, поля с датами.
Кстати, мне все еще нужно объединять таблицы, поскольку я уже добавил ссылку на внешний ключ к таблицам ... Я думаю, она должна быть достаточно умной, чтобы вернуть мне User.Staff.Password
EDIT
это то, что я нашел ..
Я добавил внешний ключ отношения в свою базу данных.
и приведенный ниже код уже может вернуть мне данные о пользователе и персонале, поскольку 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;
}
}
}
Однако у меня возникают проблемы при привязке к сетевому представлению данных графического интерфейса.
private void InitializeData()
{
gvUser.DataSource = user.Get();
}
Этот код может показывать мне данные пользователя. Но как мне вернуть данные о персонале, когда я делаю gvUser_RowEnter
?
private void gvUser_RowEnter (отправитель объекта, DataGridViewCellEventArgs e)
{
if (e.RowIndex <= 0) return; </p>
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
<== не удалось с этой ошибкой
Невозможно получить доступ к удаленному объекту.
Имя объекта: «DataContext, доступ к которому осуществляется после удаления.». </p>
когда я добавляю смотреть объект Staff в User. я могу видеть данные в скрытом
((Пользователь) (row.DataBoundItem)). Staffs.entities.Itms это содержит данные персонала ..