我有一个LinqDataSource,它被附加到Asp.net web应用程序中的GridView。
<asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="DataClassesDataContext" OnInit="LinqDataSource1_Init"
EnableDelete="True"
EntityTypeName="Id" TableName="CompanysCourses"
OnDeleting="Course_Deleting" OnDeleted="Course_Deleted">
</asp:LinqDataSource>
在OnInit事件中,我修改了类似的select和where属性
this.LinqDataSource1.Where = "CompanyId == " + UserManager.CompanyId;
this.LinqDataSource1.Select= "Course";
我选择了名为CompanysCourses的表,然后过滤结果,并根据公司的ID 选择特定的课程
这是我的网格视图
<asp:GridView ID="grdVwCourses" runat="server"
AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False"
DataKeyNames="Id" DataSourceID="LinqDataSource1"
OnSelectedIndexChanged="grdVwCourses_SelectedIndexChanged"
CssClass="table table-responsive"
PageSize="10" GridLines="Horizontal"
meta:resourcekey="GridView1Resource1">
<EmptyDataTemplate>
<asp:Label runat="server" ID="NotFoundLabel" Text="" meta:resourcekey="NotFoundLabelResource1"></asp:Label>
</EmptyDataTemplate>
<Columns>
<asp:TemplateField HeaderText="#" meta:resourcekey="HeaderId">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Id" Visible="false"/>
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" meta:resourcekey="BoundFieldResource1" />
<asp:BoundField DataField="EnglishName" HeaderText="EnglishName" SortExpression="EnglishName" meta:resourcekey="BoundFieldResource2" />
<asp:BoundField DataField="CreatedDate" HeaderText="CreatedDate" SortExpression="CreatedDate" meta:resourcekey="BoundFieldResource3" />
<asp:TemplateField meta:resourcekey="TemplateFieldResource1">
<ItemTemplate>
<asp:HyperLink ID="userLink" runat="server" NavigateUrl='<%# GetCategoriesLink(Eval("Id")) %>' Text="Categories" meta:resourcekey="userLinkResource1" />
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowSelectButton="True" ShowDeleteButton="True" meta:resourcekey="CommandFieldResource1" />
</Columns>
</asp:GridView>
我在网格视图中启用了删除,但当点击删除时,我得到了这个异常
LinqDataSource"LinqDataSource1"不支持Select属性启用"删除"、"插入"或"更新"操作时。
我已经覆盖了类似的On_Deleting事件,以显示确认对话框
protected void Course_Deleting(object sender, LinqDataSourceDeleteEventArgs e)
{
e.Cancel = true
this.panMessage.Visible = true;
int id = ((Course)e.OriginalObject).Id;
ViewState["DeleteObject"] = id;
}
我想知道这个问题的原因是什么。
编辑与我的问题重复的问题没有我想要的答案,而且细节也不一样。
我今天在一些遗留项目上遇到了同样的问题,因为当您使用SELECT语句时,显示此小部件不支持删除的错误。
因此,解决方案是从此数据源中删除select语句,即删除此行:
this.LinqDataSource1.Select= "Course";
然后在gridview上,将DataKeyNames更改为表Id名称,并更改导航属性以访问字段,例如字段中每列的Course.Id、Course.name等。
最后一件事是强制转换为主表,并使用any字段访问该表子值的Id。
int id = ((Course)e.OriginalObject).Id;