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