1

データベース内のマスターテーブルに対して追加、編集、および削除操作を実行できるグリッドビューに取り組んでいます。編集操作では、ドロップダウンコントロールにすべての外部キー値(存在する場合)を入力する必要があります。

このシナリオで使用するdynamicdataManagerコントロールに出くわしましたが、Asp.net Webフォームで簡単に使用でき、専用のDynamicdataWebサイトを作成する必要がないことがわかりました。

LinqDataSourceでデータをバインドすることはできますが、列の1つに外部キー値をロードできません。サンプルを作成するために、データベースに2つのテーブルを設定しました。

テーブルの構造は次のとおりです。

CREATE TABLE [dbo].[LK_CardType](
    [CardTypeID] [int] IDENTITY(1,1) NOT NULL,
    [CardTypeName] [nvarchar](50) NOT NULL,
    [AdditionalNotes] [nvarchar](50) NOT NULL,
    [Ref_ID] [int] NULL, --this is referring to another table called RefTes(ReferenceTest)
 CONSTRAINT [PK_LK_CardType] PRIMARY KEY CLUSTERED (    [CardTypeID] ASC ) ) ON [PRIMARY]

GO
ALTER TABLE [dbo].[LK_CardType]  WITH CHECK ADD  CONSTRAINT [fk_cardtype_RefTest] FOREIGN KEY([Ref_ID])
REFERENCES [dbo].[RefTest] ([Ref_Id])
GO

親テーブル

CREATE TABLE [dbo].[RefTest](
    [Ref_Id] [int] IDENTITY(1,1) NOT NULL,
    [Ref_Name] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_RefTest] PRIMARY KEY CLUSTERED 
(
    [Ref_Id] ASC
)
) ON [PRIMARY]

これら2つのテーブルのLINQDataSourceを作成しました。クラスの関係は、次の図に示すとおりです。

ここに画像の説明を入力してください

これで、グリッドビューにLK_CardTypesのリストを表示する動的フィールドがあり、そのうちの1つは参照されるクラス「RefTest」の名前を参照しています。ページを実行すると、参照テーブル「RefTest」の値ではなく、クラス名が表示されます。

Ref_NameがRef_Idにマップされていることをコードのどこにも言及していないので、何かが足りないことはわかっています。

グリッドビューの私のHTMLマークアップは次のとおりです。

<table>
<tr>
        <td colspan="3">
   <asp:DynamicDataManager ID="DynamicDataManager1"    AutoLoadForeignKeys="true"  runat="server">


     <%-- <DataControls><asp:DataControlReference ControlID="GridView1"  /></DataControls> --%>


      </asp:DynamicDataManager>
        </td>
    </tr>
</table>

    <asp:GridView ID="GridView1" runat="server"  AutoGenerateColumns="False" 
        DataKeyNames="CardTypeID" DataSourceID="LinqDataSource" >
        <Columns>
               <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
                   ShowSelectButton="True" />
               <asp:DynamicField DataField="CardTypeID" />
               <asp:DynamicField DataField="CardTypeName" />
               <asp:DynamicField DataField="AdditionalNotes" />
               <asp:DynamicField DataField="RefTestValue" />

</Columns>
    </asp:GridView>
        <asp:LinqDataSource  ID="LinqDataSource" runat="server" 
            ContextTypeName="JqueryGrid_MasterData.MasterTableDataContext" 
            EntityTypeName="" TableName="LK_CardTypes"  EnableDelete="True" 
            EnableInsert="True" EnableUpdate="True">
        </asp:LinqDataSource>

Page_Initイベントで、グリッドビューで動的データを有効にし、DynamicDataManagerコントロールにコントロールを登録しました

  GridView1.EnableDynamicData(typeof(LK_CardType));
          DynamicDataManager1.RegisterControl(GridView1);

Gridviewコントロールのフィールドレベルでの設定が必要ですか、それともLinqDataSourceでの設定が必要ですか?

4

1 に答える 1

0

あなたはこの仕事をすることができるかもしれません:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="CardTypeID" DataSourceID="LinqDataSource">
    <Columns>
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
             ShowSelectButton="True" />
        <asp:DynamicField DataField="CardTypeID" />
        <asp:DynamicField DataField="CardTypeName" />
        <asp:DynamicField DataField="AdditionalNotes" />
        <asp:TemplateField>
            <ItemTemplate>
                <%# Eval("RefTest.Ref_Name") %>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

もちろん、RefTest.Ref_Nameの値を編集することはできません。

于 2011-11-10T17:56:39.070 に答える