myGridView.DataSource = LinqDataSource有效但仅适用于select。我有编辑和删除列,当我尝试使用它时,我收到有关事件未被捕获的错误。具体来说,我见过OnRowDeleting,但我确信还有其他需要连线的。
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数据源未正确设置。代码正在更新它,它只是坚持任何原因,所以发生的事情是,当我重新启用删除列时,数据源最终仍然是我分配给它的临时数据源(这只是一个列表),所以当我点击删除时,它正在爆炸。由于我现在已经静态定义了回调,因此会调用它,但不会发生删除,因为数据源没有正确切换回linq数据源。
所以从本质上讲,我的问题是,当我在最后一次删除时动态设置数据源到列表时,更改仍然存在,但是当我在第一次插入时动态设置数据源到linq数据源时,改变不坚持。其中最奇怪的部分是我正在做的其他更改,而不是数据源。我正在启用自动生成的编辑和删除列,并且该更改会立即反映出来。
答案 0 :(得分:0)
在您的linq数据源上,您是否记得为删除和插入显式设置启用标志?
<asp:LinqDataSource ID="MyLinqDataSource" EnableDelete="true" EnableUpdate="true" EnableInsert="true" runat="server" ....
答案 1 :(得分:0)
最终我无法解决这个具体问题,但我确实为我的大问题找到了解决方法。
本质上我所做的是创建两个包含不同数据源的网格视图,为每一行创建一个自定义删除按钮,然后相应地交换网格。这不是一个很好的解决方案,但它足以满足我的需求。
至于为什么我交换数据源的原始解决方案不起作用,我不知道。我一直在使用的大多数项目都使用非MS工具制作表格数据,所以我甚至不确定在哪里查看。但是,如果有人对我为什么遇到这种行为有任何好的想法,我会全力以赴。