如何以编程方式在ASP.Net中连接LINQ数据源?

问题描述:

myGridView.DataSource = LinqDataSource工作,但仅适用于select。我编辑和删除列,当我尝试使用它们时,我收到有关未捕获事件的错误。具体来说,我已经看到了OnRowDeleting,但我确定还有其他人需要连线。如何以编程方式在ASP.Net中连接LINQ数据源?

myGridView.OnRowDeleting = ??

我似乎无法找到看起来像什么,我需要:(

编辑的LinqDataSource什么:这里是一些一些示例代码,说明我在做什么

protected virtual void OnRowDeleted(Object sender, GridViewDeletedEventArgs e) 
{ 
    // it means the last row was deleted 
    if (fieldGridView.Rows.Count == 1) 
    { 
     fieldGridView.DataSourceID = null; 
     fieldGridView.DataSource = new[] { new FormField { Required = false } }; 
     fieldGridView.AutoGenerateDeleteButton = false; 
     fieldGridView.AutoGenerateEditButton = false; 
    } 
} 

protected void InsertButton_Click(object sender, CommandEventArgs e) 
{ 
    // pull data out of footer row and insert it into the DB 
    if (fieldGridView.DataSource == null || fieldGridView.DataSource.GetType() != LinqDataSource1.GetType()) 
    { 
     fieldGridView.DataSource = LinqDataSource1; 
     fieldGridView.AutoGenerateDeleteButton = true; 
     fieldGridView.AutoGenerateEditButton = true; 
    } 
} 

也。请注意,我在标记中静态设置了OnRowDeleting事件,但错误消失了,但Linq数据源没有正确设置,代码正在更新它,它只是坚持不管什么原因,所以发生了什么?当我重新启用删除列时,数据源最终仍然是我分配给它的临时数据源(这只是一个列表),所以wh我击中删除它炸毁了。由于我现在已经静态定义了回调函数,所以它会被调用,但是不会发生删除操作,因为数据源没有正确切换回linq数据源。

所以从本质上讲,我的问题是,当我动态地将数据源设置为最后一次删除的列表时,更改仍然存在,但是当我动态地将数据源设置为第一次插入时的linq数据源时,变化并不是一帆风顺的。它最奇怪的部分是我正在做的其他更改坚持,而不是数据源。我启用了自动生成的编辑和删除列,并且该更改正在立即反映出来。

+0

你的databind()在哪里? – Min 2009-12-10 01:55:46

+0

原始代码正在调用databind(),这是我试图做的事情的一个快速总结。 – Fred 2009-12-10 16:18:43

在你的linq数据源上,你是否记得明确设置用于删除和插入的启用标志?

<asp:LinqDataSource ID="MyLinqDataSource" EnableDelete="true" EnableUpdate="true" EnableInsert="true" runat="server" .... 
+0

是的,数据网格正常工作。 我试图解决这个问题,因为没有行的时候gridview没有渲染,所以我检测到这个并且将数据源换成了一个带有单个元素的列表。当添加新项目时,我将LINQ数据源交换回来,但所有事件都没有正确连接。 因此,如果gridview以其中的元素开始,我可以正常地添加,删除和更新,只有当我删除它们全部时,添加一些,然后尝试删除我遇到此问题的新添加的那些。 – Fred 2009-12-09 04:30:35

+0

您可以发布代码,还是展示相同问题的简化示例?另外,您是否考虑过使用空数据模板来允许初始插入,而不是手动交换网格的数据源以将其伪装为渲染项目模板? – 2009-12-09 17:48:22

+0

不幸的是我需要页眉和页脚行来渲染,因为我使用页脚行作为插入行。 – Fred 2009-12-09 18:28:59

最终我无法解决这个特定问题,但我找到了解决我的大问题的解决方法。

实质上,我所做的是创建两个不同数据源的gridviews,为每行创建一个自定义删除按钮,然后相应地交换网格。这不是一个很好的解决方案,但它足以满足我在做的事情。

至于为什么我原来的交换数据源的解决方案不起作用,我不知道。我一直在使用的大多数项目都使用非MS工具来制表数据,所以我甚至不知道在哪里寻找。但是,如果任何人有任何好的想法,为什么我遇到了这种行为,我都耳熟能详。