- - PR -
DataGridのDataViewソートとテンプレート列
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-19 11:38
> DataGridを表示するためのSQL文でこの項目を用意して
> あげればいいのかなぁ? です。 さらに補足すると、
この辺の式で生成できる(例: 「何とかコードの先頭が'1'の時」)のなら、そもそも単独の項目として取得する必要さえありません。 [ メッセージ編集済み 編集者: にしざき 編集日時 2005-07-19 11:40 ] | ||||||||
|
投稿日時: 2005-07-19 14:08
にしざき様、いつもありがとうございます♪
SQL文を以下のようにしました。 ------------------------------------------------------- sql = "SELECT *, '0' AS CHECK_FLG " & _ "FROM TABLE_A " & _ "WHERE TABLE_A.SHAIN_NO = '" & shain_no & "'" ------------------------------------------------------- ASPは以下のように記述しました。 ------------------------------------------------------- <asp:CheckBox id="CheckBox1" runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "CHECK_FLG") = "0" %>'> </asp:CheckBox> ------------------------------------------------------- 結果は以下のようになりました。 ・DataGrid自体は表示されました ・明細行は1行だけ表示されました ・チェックボックスだけ表示されてデータは何も表示されませんでした > この辺の式で生成できる(例: 「何とかコードの先頭が'1'の時」)のなら、 > そもそも単独の項目として取得する必要さえありません。 ?? す、すいません。 噛み砕いてお願いできますでしょうか。 そういえば、私のやりたいことをお話ししていなかったので 簡単にお伝えさせてください。 1.テーブルの内容をDataGridで表示する。 2.ある処理を行いたいデータにのみチェックをONにする。 3.[実行]ボタンを押すとチェックされている行だけ処理する。 どうぞよろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-07-19 14:43
> 1.テーブルの内容をDataGridで表示する。
> 2.ある処理を行いたいデータにのみチェックをONにする。 > 3.[実行]ボタンを押すとチェックされている行だけ処理する。 チェックの初期値はすべて OFF ですか? それともいずれかの条件を満たすものだけ ON にしますか? 本スレッドの元投稿では、チェックの初期値を設定する方法について聞かれていたのですが、nori さんのご質問ではチェックの結果の取得方法を聞いているように感じられたので。 チェック結果の取得方法であれば、VB.NET は知らないんですが、
こんなもんかなぁ? いつも掲示板に書くコードは試していないので、 動かない可能性は充分にありますが。 | ||||||||
|
投稿日時: 2005-09-02 11:00
にしざき様、いつもありがとうございます。
お返事を差し上げず、申し訳ございませんでした。 1ヶ月半ほど別の仕事をしておりプログラムを組めませんでしたが またこの仕事に復帰しましたので宜しくお願い致します。 このように記述してDataGridは正常に表示されるようになりました。 --------------------------------------------------------------------- <ItemTemplate> <asp:CheckBox id=CheckBox1 runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "CHECK_FLG") %>'> </asp:CheckBox> </ItemTemplate> --------------------------------------------------------------------- にしざき様に教えて頂いたのをを参考にチェック結果の取得方法も出来ました。 チェックボックスの初期値はOFFにします。 最後の問題はソートです。 チェックボックスをチェックした後にソートを行うとチェックが無効に なってしまいます。 ソート時のDataBindで何かしなければいけないように思うのですが。。。 皆様、またお力をお貸し頂けたら嬉しいです♪ よろしくお願い申し上げます。 | ||||||||
|
投稿日時: 2005-09-02 12:50
「ソートを行うと」って時点で DataBind() を呼んでいますよね。
この時点でチェック状態は失われる(DataTable から設定しなおす)ので、この前にチェック状態を設定するためのデータ を更新してやる必要があります。 元 DataTable の CHECK_FLG 列の値をこの時点で更新していいのであれば、前回の私の投稿か、別の方法を用いて更新を行います。 依然として VB.NET での記述方法はわからない上に全く試していないのですが、
として、
こんなので更新できるのかなぁ。 一旦更新してしまえば、あとは当初と同様に DataBind() 内で勝手にチェックをつけてくれるはず。 | ||||||||
|
投稿日時: 2005-09-02 19:08
にしざき様、ありがとうございます。
ソート時にDataBind()を呼んでいます。 ご指摘通り OnCheckedChanged='CheckFlgChanged' を入れて、 コードを以下のようにしました。 --------------------------------------------------------------- Protected Sub CheckFlgChanged(ByVal sender As Object, ByVal e As EventArgs) Dim Item As DataGridItem Dim ds As New DataSet Dim dv As New DataView ds = Cache("DS") dv = ds.Tables(0).DefaultView dv(Item.ItemIndex)("CHECK_FLG") = DirectCast(sender, CheckBox).Checked End Sub --------------------------------------------------------------- ※最初に画面を開いたときにDataBind()でキャッシュにDataSetを保存しています。 ソートを実行したところエラーになります。 エラー:オブジェクトはインスタンスに設定されていません。 ds、dv とも New してますし、、、、、。 基本的なことで申し訳ありませんが、どうか宜しくお願い致します。 | ||||||||
|
投稿日時: 2005-09-02 19:43
Item が設定されていませんね。これは、ItemDataBound の時の話だった。
自分で探さなきゃいけないかもしれません。
かな? 手抜きをすると、
ですが。 | ||||||||
|
投稿日時: 2005-09-05 15:01
にしざき様、本当にいつもありがとうございます☆
で、できました!!!!! 感動です!! ---------------------------------------------------------- Protected Sub CheckFlgChanged(ByVal sender As Object, ByVal e As EventArgs) Dim Item As DataGridItem Dim ds As New DataSet Dim dv As New DataView Item = DirectCast(DirectCast(sender, Control).Parent.Parent, DataGridItem) ds = Cache("DS") dv = ds.Tables(0).DefaultView dv(Item.ItemIndex)("CHECK_FLG") = DirectCast(sender, CheckBox).Checked End Sub ---------------------------------------------------------- Item = DirectCast(DirectCast(sender, Control).Parent.Parent, DataGridItem) senderとして渡されたものをDataGridItem型に変換するということだと思うのですが、 DirectCast(sender, Control) を入れるのは何故でしょうか? |