从 GridView 中的 DataRow 获取原始对象 C#

3
我想显示一个由Linq to Sql生成的对象集合(IEnumerable)。因此,我将GridView的DataSource属性绑定到Linq to SQL方法生成的输出。在GridView的SelectedIndexChanged事件中,我尝试将所选行的DataItem转换回我的原始对象,但最终得到了null值。
以下是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
    RlDataContext dc = new RlDataContext();
    this.dgvReports.DataSource = dc.GetReports(1);
    this.dgvReports.DataBind();
}

protected void dgvReports_SelectedIndexChanged(object sender, EventArgs e)
{
    if (this.dgvReports.SelectedIndex >= 0)
    {
        Report rpt = (Report)this.dgvReports.SelectedRow.DataItem;
    }
}

GetReports的返回类型是ISingleResult<Report>


1
如果我没记错的话,在 Page_Load 之后,重复器的 DataItem 将不再可用。因此,在 SelectedIndexChanged 事件的一部分中,DataItem 将为空。不确定是否有什么可以做(这就是为什么这是一个注释而不是答案)。一个选项是在初始 DataBind 期间构建要保存在本地的数据,并在事件处理程序中使用它。 - freefaller
1
请参考这个链接,它可能会对您有所帮助:https://dev59.com/vEjSa4cB1Zd3GeqPKPsU - Jegadeesh
2个回答

3

使用绑定源在数据网格视图和列表之间进行绑定。当在数据网格视图中进行选择时,使用绑定源的Current属性从列表中获取正确的项目。


BindingSource似乎是'WinForms'命名空间的一部分。我是否应该导入此命名空间仅供使用BindingSource?难道没有利用ASP.Net功能的方法吗? - Romano Zumbé
1
这个链接可能对您有所帮助。http://forums.asp.net/t/1645349.aspx?BindingSource+Equivalent+in+ASP+Net+web+programming+ - user2320861
我发现的唯一方法是在DataBound事件期间创建自己的集合。由于这对我来说不可行,所以我将坚持使用BindingSource解决方案。谢谢你的帮助。 - Romano Zumbé

0

这是我从datagridview中获取信息的方法

    string variabel = yourDataGridView["Columnname"].ToString();

你也可以在循环中使用它,那么它就是:

    string variabel = yourDataGridView["RowNumber"].Cells["Columnname"].Value.ToString();

希望这能帮到你!


你好,感谢你的回答。但是这并没有帮到我,因为它只能获得一列文本。我想要的是原来绑定到 gridView 的对象。 - Romano Zumbé
客户 cust = row.DataBoundItem as Customer; if (cust != null) { cust.SendInvoice(); }也许这能帮到您。 - RvA
GridViewRow没有属性'DataBoundItem'。您确定您的目标是ASP.Net gridView而不是WinForms DataGridView吗? - Romano Zumbé
我曾经使用过WinForms。不知道ASP.Net GridView和WinForms Gridview之间是否有区别。 - RvA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接