【问题标题】:LinqDataSource does not support the Select property when the Delete删除时 LinqDataSource 不支持 Select 属性
【发布时间】:2016-03-28 08:51:42
【问题描述】:

我有 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;
}

我想知道这个问题的原因是什么。

编辑 被称为重复的问题没有我寻求的答案,细节也不同。

【问题讨论】:

标签: c# asp.net gridview linq-to-sql linqdatasource


【解决方案1】:

我今天在一些遗留项目上遇到了同样的问题,因为显示此小部件的错误不支持在您使用 SELECT 语句时删除。

所以解决方案是从此数据源中删除您的选择语句,即删除此行:

this.LinqDataSource1.Select= "Course";

然后在 gridview 上将 DataKeyNames 更改为您的表 ID 名称,并更改导航属性以访问字段,例如字段中每个列的 Course.Id、Course.Name 等。

最后一件事是转换到主表并使用 any 字段来访问该表子值的 Id。

int id = ((Course)e.OriginalObject).Id;

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2015-10-25
    • 2016-04-26
    • 2017-09-30
    • 2021-07-15
    • 2011-10-25
    相关资源
    最近更新 更多