- PR -

DataGrid内のボタン列の制御

1
投稿者投稿内容
かんいち
会議室デビュー日: 2002/10/29
投稿数: 9
投稿日時: 2002-11-27 09:25
c#でwebフォームを作成しています。
DataGrid内のボタン列に削除を配置しているのですが、TabStopでカーソルが当たっている
のに気づかずにEnterキーを押してしまいデータが削除されてしまいます。
そこでDataGrid内のボタン列にTabStopがあたらないようにしたいのですがやり方が
解りません。
ご存知の方はお教えください。

また、1クリックで削除できてしまうところが気にいらないのですが、Webフォームなので
削除の確認ボックスを表示させる事ができません。
ユーザーに削除の再確認を促す方法としてはどの様なものが考えられますか?
yasu
会議室デビュー日: 2002/10/15
投稿数: 7
お住まい・勤務地: 大阪府
投稿日時: 2002-11-27 19:39
前にも似たような内容のスレッドがありましたが、そのほとんどが
「JAVAスクリプトでダイアログを表示する」という案でした。
しかし、
・本当に解決できたのか不明
・JAVAスクリプトは未経験
の理由で私はこの方法を使っていません。

代わりに「削除の確認用のWEBフォーム」を作成し、DataGridがあるページからResponse.Redirectなどで移動します。
このフォームには、
・削除する/削除しないの2つのボタンを貼り付ける
・「本当に削除しますか?」のようなメッセージを表示
・削除対象となっているデータを表示
といった内容で、処理は、
・「削除する」ボタンが押されたら削除処理を実行し、DataGridがあるページに移動
・「削除しない」ボタンが押されたら何もしないで、DataGridがあるページに移動
とします。

つまり「削除処理のみを独立したWEBフォームに任せる」といったところでしょうか。

このような方法でよろしければ、使って下さい。
かんいち
会議室デビュー日: 2002/10/29
投稿数: 9
投稿日時: 2002-11-28 13:16
yasuさんありがとうございました。

yasuさんの方法でやりたい事は出来るようになりました。
Response.Redirect()を使っていなくて画面の遷移はすべてJAVAスクリプトで
やっていましたもので、削除フォームも別ウインドウにJAVAスクリプトで開いていました。
そうしたらDataGridがあるページに戻っても(実際は削除フォームを閉じただけ)
リロード機会がないので削除データが残ったままでした。(あたりまえですね(笑))
そこでResponse.Redirect()を使ったらうまくいきました。
ありがとうございました。

ところでDataGridフォームから削除フォームにSQLを作成するためにキーを送らなければ
ならないと思いますが、どのようにされていますか?
セッション変数ですか? 
Cozy
会議室デビュー日: 2002/11/28
投稿数: 2
投稿日時: 2002-11-28 16:24
>DataGrid内のボタン列にTabStopがあたらないようにしたいのですがやり方が
>解りません。

Page_Load処理の中で、

//行数分処理
for (int cnt = 0; cnt < dataGrid.Items.Count; cnt++)
{
 //Cells[0]:0列目がボタンの時
 ((WebControl)dataGrid.Items[cnt].Cells[0].Controls[0]).TabIndex = -1;
}

と処理させれば Tab でのフォーカス移動はしなくなります。
厳密には、Controls.Count や Controls[0] が Button(LinkButton) で
あるかをチェックする必要があるかと思いますが…。
yasu
会議室デビュー日: 2002/10/15
投稿数: 7
お住まい・勤務地: 大阪府
投稿日時: 2002-11-28 19:24
お役に立てて幸いです。
引用:

DataGrid内のボタン列にTabStopがあたらないようにしたいのですがやり方が解りません。


私も解決案を思い浮かばなかったので、この質問への発言は何もしていませんでした。
Cozyさんありがとうございます。

引用:

ところでDataGridフォームから削除フォームにSQLを作成する
ためにキーを送らなければならないと思いますが、どのようにされていますか?
セッション変数ですか?


私はセッション変数を使用しています。

…何だか素っ気ない返事になってしまいました。
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-11-28 21:04
引用:

 ((WebControl)dataGrid.Items[cnt].Cells[0].Controls[0]).TabIndex = -1;
}

と処理させれば Tab でのフォーカス移動はしなくなります。


tabindex に負の値を設定することは、HTML4 には違反します。 なので、ブラウザによって挙動が違ったとしても文句は言えない、ってことを忘れずに。 f(^^;

HTML 4.01 Specification - 17.11.1 Tabbing navigation
引用:

tabindex = number [CN]
This attribute specifies the position of the current element in the tabbing order for the current document. This value must be a number between 0 and 32767. User agents should ignore leading zeros.

Cozy
会議室デビュー日: 2002/11/28
投稿数: 2
投稿日時: 2002-11-29 00:36
biacさん、ご指摘ありがとうございます。
確かに、Netscape 7.0 では動かないです
どうしてなの?と思っていたら、こういう規則があるのですね。

実はC#を始めて1ヶ月程なのですが、HTMLの経験が無くてもこんなに簡単に
Webフォームが扱えるなんて、なんて便利なんだ、と驚いていました。
しかしここ数日、IE以外のブラウザで動かしてみて愕然としています・・・。
やっぱり、HTMLの基礎をしっかり押さえておかないといけないですね。

ちょっと話が逸れてしまいました。

引用:

ところでDataGridフォームから削除フォームにSQLを作成するためにキーを送らなければ
ならないと思いますが、どのようにされていますか?
セッション変数ですか? 


私もyasuさんと同じく、セッション変数を使用しています。
かんいち
会議室デビュー日: 2002/10/29
投稿数: 9
投稿日時: 2002-11-29 10:35
私もみなさん同様、セッション変数を使っていますが
これを多用した場合のメモリへの影響を心配しています。
開くアドレスに ?Trans=「KEYの内容」 等と付加し、開いたフォームで「KEYの内容」
を取得するという方法も考えられます。

セッション変数を使用したほうが楽でいいとは思うのですが、
メモリーへの影響はどのように考えていますか?
あまり考慮しなくてもいいものでしょうか?
1

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