簡體   English   中英

當刪除時,LinqDataSource不支持Select屬性

[英]LinqDataSource does not support the Select property when the Delete

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM