如何以编程方式在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数据源时,变化并不是一帆风顺的。它最奇怪的部分是我正在做的其他更改坚持,而不是数据源。我启用了自动生成的编辑和删除列,并且该更改正在立即反映出来。
在你的linq数据源上,你是否记得明确设置用于删除和插入的启用标志?
<asp:LinqDataSource ID="MyLinqDataSource" EnableDelete="true" EnableUpdate="true" EnableInsert="true" runat="server" ....
是的,数据网格正常工作。 我试图解决这个问题,因为没有行的时候gridview没有渲染,所以我检测到这个并且将数据源换成了一个带有单个元素的列表。当添加新项目时,我将LINQ数据源交换回来,但所有事件都没有正确连接。 因此,如果gridview以其中的元素开始,我可以正常地添加,删除和更新,只有当我删除它们全部时,添加一些,然后尝试删除我遇到此问题的新添加的那些。 – Fred 2009-12-09 04:30:35
您可以发布代码,还是展示相同问题的简化示例?另外,您是否考虑过使用空数据模板来允许初始插入,而不是手动交换网格的数据源以将其伪装为渲染项目模板? – 2009-12-09 17:48:22
不幸的是我需要页眉和页脚行来渲染,因为我使用页脚行作为插入行。 – Fred 2009-12-09 18:28:59
最终我无法解决这个特定问题,但我找到了解决我的大问题的解决方法。
实质上,我所做的是创建两个不同数据源的gridviews,为每行创建一个自定义删除按钮,然后相应地交换网格。这不是一个很好的解决方案,但它足以满足我在做的事情。
至于为什么我原来的交换数据源的解决方案不起作用,我不知道。我一直在使用的大多数项目都使用非MS工具来制表数据,所以我甚至不知道在哪里寻找。但是,如果任何人有任何好的想法,为什么我遇到了这种行为,我都耳熟能详。
你的databind()在哪里? – Min 2009-12-10 01:55:46
原始代码正在调用databind(),这是我试图做的事情的一个快速总结。 – Fred 2009-12-10 16:18:43