目前我的存储库返回一个IQueryable
对象,该对象列出了我的数据库中的数据,并将其绑定到BindingSource
以便在网格中使用:
public void BindTo(IQueryable elements)
{
BindingSource source = new BindingSource();
source.CurrentChanged += new EventHandler(source_CurrentChanged);
source.DataSource = elements;
elementNavigator.BindingSource = source;
elementGridView.DataSource = source;
}
这很有效。但是,当用户单击网格中的行时,我想要做一些事情。我正在努力识别用户正在选择的元素。我有以下内容:
在我看来:
private void source_CurrentChanged(object sender, EventArgs e)
{
_presenter.ElementChanged(sender, e);
}
在演讲者中:
public void ElementChanged(object sender, EventArgs e)
{
BindingSource source = (BindingSource)sender;
// Here I need to get the ID of the selected element in the source.Current property.
// HOW?
}
这似乎工作正常 - 我可以看到调试时source.Current
包含数据:
? source.Current
{ BodyId = 1, IsInUse = true, IsValid = true, CreateDate = {04/07/2006 09:31:59}, LastUpdateDate = {04/07/2006 09:31:59}, StatusDescShort = "Exist" ... }
BodyId: 1
CreateDate: {04/07/2006 09:31:59}
IsInUse: true
IsValid: true
LastUpdateDate: {04/07/2006 09:31:59}
StatusDescShort: "Exist"
但我不知道如何访问BodyId
的值。我有一种感觉,我错过了一些非常明显的东西(不是第一次)。
答案 0 :(得分:2)
我很惊讶你没有使用像IQueryable<MyType>
这样的东西。
因为这会是一个简单的转换问题:source.Current as MYType
也许可以消除中间的DataRowView