- PR -

GridViewにロジックで追加したデータを編集する方法

1
投稿者投稿内容
とら
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 54
投稿日時: 2007-06-15 14:06
Visual Studio 2005で、ASP.NET Webサイト(C#)の調査をしています。

別の質問で、GridViewにSQLに関係ないデータをロジックによって追加する方法を
教えていただきました。
(DataTableをバインドする方式を採用しています)

以下のようなコードを記述することによって、チェックボックス形式や、通常の
テキスト形式で、一覧表示することが出来ました。


□ GridViewの定義部分
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:CheckBoxField DataField="選択" HeaderText="選択" />
<asp:BoundField DataField="CODE" HeaderText="CODE" />
<asp:BoundField DataField="DATA" HeaderText="DATA" />
</Columns>
</asp:GridView>


□ ロジック部分
DataTable dt = new DataTable();
dt.Columns.Add("選択", Type.GetType("System.Boolean"));
dt.Columns.Add("CODE", Type.GetType("System.String"));
dt.Columns.Add("DATA", Type.GetType("System.String"));

//DataTableにデータ追加
dt.Rows.Add(true,"CODE01", "DATA01");
dt.Rows.Add(false,"CODE02", "DATA02");

//GridViewにバインド
GridView1.DataSource = dt;
GridView1.DataBind();


この結果、思うようなイメージで表示はされたのですが、これを編集する方法
が判りません。
ReadOnlyプロパティがあったものですから、編集できるのかとも思ったのですが・・・

そもそも、BoundFieldやCheckBoxFieldを使用している場合には、内容の編集は
出来ないものなのでしょうか?

また、一旦CheckBoxFieldを追加した後で、該当項目を「このフィールドをTemplateFieldに変換します。」と指定することによって、CheckBoxが入力可能に
成るようですが、この場合も、項目にバインドしている状態だと入力可能に
成りません。

根本的に、考え違いをしているかもしれないのですが、何か参考情報は
有りませんでしょうか?

よろしくお願いします。

どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-06-15 14:48
GridViewのEditIndexプロパティに編集したい行の番号を指定すると、その行が編集モードになります。
ただ、この編集モードにした場合もロジックでデータを追加してデータバインドを行う必要があるでしょうね。
また、変更後、そのデータをどうやって取り出すか、という方法も考えておく必要があります。

まぁ、やり方はいろいろあるのですが、まずは一番一般的なSqlDataSourceでデータをGridViewに渡してIDEからの設定でデータを更新できるサンプルを作ってみて、そこでGridViewがどのように動いているのかを確認してみるのがいいんじゃないかと思います。
そのうえで、GridViewの仕様に合わせる形でデータを独自に追加したときの動きを考えてみてはどうでしょうか。
とら
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 54
投稿日時: 2007-06-15 16:21
引用:

どっとねっとふぁんさんの書き込み (2007-06-15 14:48) より:

まぁ、やり方はいろいろあるのですが、まずは一番一般的なSqlDataSourceでデータをGridViewに渡してIDEからの設定でデータを更新できるサンプルを作ってみて、そこでGridViewがどのように動いているのかを確認してみるのがいいんじゃないかと思います。
そのうえで、GridViewの仕様に合わせる形でデータを独自に追加したときの動きを考えてみてはどうでしょうか。




確かに、ご指摘のとおり、標準的な使用方法を検討する方法を取っていませんでした。
とりあえず、さっとやってみたレベルなんですが、GridViewを使用した場合、
編集処理は1レコード毎というのが、基本のようですね。

実際に行いたいのは、こんな感じの処理です。

例えば
こんなテーブル定義があるとします。
テーブル名:受注明細
ユニークキー項目:受注番号、受注行番号
属性項目:商品CD、明細受注金額

行いたい処理は・・

一つの受注番号に紐付く受注明細を一覧で表示し、明細受注金額欄を全行編集可能
状態にする。
Webフォームに直接置いたボタン(更新ボタン)をクリックされると、全ての行の
明細受注金額の合計を算出し、合計額が、規定の額を超えない場合に限り、各行の
入力結果を実際のテーブルに更新することによって反映する。


このように、複数行に同時に入力を受け付けて、一括して更新処理を行うような
処理には、あまり向かないのでしょうか?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-06-15 18:42
GridViewの標準機能では対応できないものなので、いろいろとプログラムを記述する
必要がありますね。
検索すると、GridViewでデータの一括更新をする場合のサンプルもネット上には
あると思いますが、この場合にGridViewを使うべきか、ほかの方法を何か考えるのか、
一般的な解は無いように思います。

私だったら。。。
明細行の増減は無いのかな、と思ったんですが、どうでしょう。
そのあたりの対応も考えて、一時的なデータセットをセッション内に保持するように
して、各明細行の操作は一行ずつにするかなぁ。
で、登録ボタンを別につくっておいて、そのボタンクリックによってチェックと
DBへの登録を行う、と。

まぁ、この仕様でGridViewを使ったとしても、独自のプログラムで対応する部分が結構
あることは確かですけどね。
1

スキルアップ/キャリアアップ(JOB@IT)