質問
私は Rails のバックグラウンドを持っており、ASP.NET プロジェクト (ASP MVC ではない) でいくつかの作業を行っています。初心者の質問:レコードのテーブル用のカスタム エディターを作成する最も簡単な方法は何ですか?
例えば:大量のデータ行があり、それぞれの「カテゴリ」フィールドを変更したいと考えています。ドロップダウン、リンク、ユーザーが入力する可能性があります。
Rails では、行を反復処理してテーブルを作成し、行ごとにフォームを作成します。フォームには入力ボックスまたはドロップダウンがあり、「/item/edit/15?category=foo」のようなコントローラーにデータを送信します。15 は itemID で、新しいカテゴリは「foo」です。
私は ASP.NET モデルを初めて使用するため、これを行う「正しい」方法がわかりません。新しいデータを取得して保存する最も簡単な方法だけです。カスタム コントロールを作成して各行に追加しますか?助けていただければ幸いです。
解決
今では本当にチートして、.NET 3.5 SP1 に付属する新しい動的データを覗いてみることができます。Scott Guthrie のブログ エントリでは、いかに迅速かつ簡単に実行できるかをデモしています。
http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx
最先端の知識を持たない場合は、XSD ジェネレーターを使用して、問題のテーブルと一致する厳密に型指定された DataSet を生成することになります。これにより、すべての CRUD ステートメントの実行に使用できる TableAdapter も生成されます。
そこから、それを DataGrid にバインドし、それに関連するすべての標準テンプレート/イベント (EditIndex、SelectedIndex、RowEditing、RowUpdated など) を利用します。
私は .NET 1.0 の初期からこれを行ってきましたが、フレームワークが更新されるたびに、この種の機能はますます合理化されてきました。
編集:Matt Berseth のブログにも簡単に賛同したいと思います。私はしばらく彼の作品をたくさんフォローしてきましたが、とても素晴らしいです!
他のヒント
これを行うコントロールがいくつかあり、相対的な柔軟性に応じて複雑さのレベルは異なります。
これを行う従来の方法は、テーブル レイアウトを提供する DataGrid コントロールです。外観にさらに柔軟性を持たせたい場合は、DataList コントロールと ListView コントロールにもフィールドの編集、挿入、削除のサポートが組み込まれています。
チェックアウト マット・バーセスのブログ asp.net コントロールの動作の優れた例をいくつか紹介します。
答えてくれてありがとう。DataGrid をカスタマイズすることが最善の方法のようです。ASP.NET 初心者のために、私がやっていることをここに示します。
<asp:DataGrid ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="RuleID" Visible="False" HeaderText="RuleID"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="Category">
<ItemTemplate>
<!-- in case we want to display an image -->
<asp:Literal ID="litImage" runat="server">
</asp:Literal>
<asp:DropDownList ID="categoryListDropdown" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
これによりデータグリッドが作成されます。次に、それをデータ ソース (私の場合は DataTable) にバインドし、次のようなものを使用できます。
foreach (DataGridItem item in this.GridView1.Items)
{
DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown"));
categoryListDropdown.Items.AddRange(listItems.ToArray());
}
データ グリッドの最初のドロップダウンにデータを入力します。この場合、 item.Cells[0].text にアクセスして RuleID を取得することもできます。
自分用メモ:ASP.NET モデルは、分離コード ファイル内ですべてを実行します。大まかに言うと、いつでも GridView1.Items を反復処理して各行を取得し、item.findControl("ControlID") を使用して、[更新] ボタンを押した後などに各項目に格納されている値をクエリできます。