2016-03-28 5 views
0

Gridq In Asp.net WebアプリケーションにLinqDataSourceが添付されています。削除時にLinqDataSourceがSelectプロパティをサポートしない

私は選択を変更し、その

this.LinqDataSource1.Where = "CompanyId == " + UserManager.CompanyId; 
this.LinqDataSource1.Select= "Course"; 

のような性質は、私がCompanysCoursesという名前のテーブルと、そのフィルタ後の結果を選択して、同社のID

に基づいて特定のコースを選択していているのOnInitイベント内
<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> 

これは私のグリッドビューです

<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> 

I havグリッドビューでeは削除有効になっていますが、削除をクリックしたとき、私は削除、挿入または更新操作が有効になっている場合は、この例外

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

を示さなければなりません。

編集 私の重複と呼ばれる質問には、私が求める答えはなく、詳細も異なります。

+0

[LinqDataSourceコントロールが削除、挿入または更新操作が有効になっているSelectプロパティをサポートしていません]の可能な重複(http://stackoverflow.com/questions/1593559/linqdatasource-does-not-support-the -select-property-when-delete-insert-or-u) – sgmoore

+0

私の編集を参照してください、ありがとう –

答えて

0

このウィジェットを表示しているエラーでSELECTステートメントを使用したときの削除がサポートされないため、いくつかの従来のプロジェクトで同じ問題が発生しました。

ので、解決策は、このデータソースからSELECT文を削除すなわち、この行を削除することです:

this.LinqDataSource1.Select= "Course"; 

その後、GridViewの変更DataKeyNamesにあなたのテーブルID名にしても、フィールドにアクセスするには、ナビゲーションプロパティを変更しますたとえば、フィールドの各列のCourse.Id、Course.Nameなどを入力します。

最後に、メインテーブルにキャストし、anyフィールドを使用してそのテーブルの子値のIDにアクセスします。

int id = ((Course)e.OriginalObject).Id; 
関連する問題