- PR -

ソート後のポインタ

投稿者投稿内容
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2005-06-23 14:27
いつもお世話になります。

DataGridのソートについてお聞きしたいことがあります。

DataGridで編集ボタンとかを押すと、その行の色が変わりますよね。
その状態でソートすると、この色が指定されている行について
いかないんです。

【昇順】
1行目  キー値:1
2行目  キー値:2
3行目  キー値:3  ←現在はココが指定されて色が違う

  ↓

【降順】
1行目  キー値:3  ←降順ソート後はココの色が変わってほしい
2行目  キー値:2
3行目  キー値:1  ←同じ場所が指定されたまま
 
全く検討がつきません。

申し訳ございませんが、ご教授のほどよろしくお願いいたします☆

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-23 21:49
 SelectedIndexを更新する。
_________________
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2005-06-24 10:27
SelectedIndexを以下のように使ってみました。

DataGrid1_ItemCommand --------------------------

If e.CommandName = "Select" Then
  Session("Index")=DataGrid1.SelectedIndex
End If
------------------------------------------------

ここで取得した値を確認すると、どの行の[選択]ボタンを
押しても "0" になってしまいます。

で、DataGrid1.SelectedIndexではなく、e.Item.ItemIndexを
つかってみたところ、その行のインデックスを取得しました。

でも、、、この値をソート後に戻してもやはり同じ結果に
なるのではないでしょうか、、、。

私の考え方がちがうのかなぁ〜。

[選択]ボタンをクリックしても、その行の色が変わらないように
する方法も検討してみようかと思ってます。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-06-24 10:38
SelectedIndex は自動的には設定されません。

そもそも、「編集ボタンとかを押す」ときに、
どうやって「色を変え」ているのでしょうか。

SelectedIndex を使っていないなら、EditItemIndex ?
であったとしても同様で、自分で EditItemIndex を
再設定する必要があります。
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2005-06-24 13:11
DataGridの自動フォーマットで「カラフル4」ってやつを
選択しました。
そうするとボタンを押したときに色が変わるんです。

今、色が変わらないようにできないかを調査中・・・です。

SelectedIndexを自分で再設定するということは、
DataGridの現在の行数を取得して、その値をSelectedIndexに
設定するということでしょうか?
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-06-24 13:58
すみません。間違いを訂正。
SelectedIndex は設定されるようですね。

「カラフル4」に限らず、「選択したところの色を変えない」
だけであれば、SelectedItemStyle を設定しなければいいかと思います。
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2005-06-24 14:19
ありがとうございます。

SelectedItemStyleを設定すれば良いというのは何となく気づいていましたが
どんな指定をすれば良いのかで悩んでいました。

やけくそになってSelectedItemStyleの設定部分を消してみたら、
何と!成功!!

お騒がせいたしました。

また、別の件で悩みがあるので、もう少し調べてから質問させていただきます。
今後ともよろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-24 22:32
あ゛〜、終わるな、終わるな ヾ(^-^;

引用:

DataGrid1_ItemCommand --------------------------

If e.CommandName = "Select" Then
  Session("Index")=DataGrid1.SelectedIndex
End If
------------------------------------------------

ここで取得した値を確認すると、どの行の[選択]ボタンを押しても "0" になってしまいます。


でしょうね。まだ変更されていないですから。

 イベントが実行される順番に気をつけてください。ItemCommandイベントは、コマンドが発行されたときに励起されます。ここでどんなアクションをおこすのか振り分けがされ、実装されている必要なアクションが実行されます。SelectedIndexが換わるのは、選択を変更するというアクションを起こしたときです(そして、インデックスが変更された、というイベントが発生します)。

 また、このインデックスを保存しても無駄です。これはインデックスです。最初、3番目が設定されており、3番目にあったアイテムが1番目に換わりましたが、3番目が選択されたままなんですよね。ということは、インデックスは3のままだということです。必要なのは、「何が選択されているか」で、ソートによって選択されていたものが「何番目に移動したか」です。したがって、ソートした後に「選択しているアイテムが何番目に移動したか」を調べ、その値をSelectedIndexに指定してやる必要があります(当然、インデックスが変更された、というイベントが発生します)。


 あと、余分なことになりますが、セッション変数に直に格納するのではなく、何らかのクラスインスタンスに格納してから、格納しましょう。破棄するの、大変じゃないですか?
# え?Clearで一発?


 もうひとつ。ポストバックが発生する毎に、DataBindしたりは、していないですよね?SelectedIndexが0というのが気になって。1行目選んで2行目選んだら、1回目は−1、2回目は0になると思うんだけど???
_________________

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