- - PR -
DataGridのButtonColumnにある特定のボタンを非表示にしたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-02 14:22
ASP.NETで開発中の初心者の@beginnerです。
よろしくお願いします。 現在、DataGridにButtonColumnで配置した削除ボタンを ある条件で1行目にある削除ボタンのみ非表示にし、 残りの行には削除ボタンを表示させたいのです。 e.Item.Cells(0)やe.Item.ItemIndex、e.Item.Controls などを使うと全ての行にある削除ボタンが非表示に なってしまい、 以下の過去レスをヒントにできるかなと思いましたが、 よく理解できておりません。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3930&forum=7 下記のようなイメージなのですが、 どなたかヒントをご教授いただけないでしょうか。 よろしくお願いします。 ----------------------------------- テキスト | 削除ボタン(非表示) ----------------------------------- テキスト | 削除ボタン(表示) ----------------------------------- テキスト | 削除ボタン(表示) ----------------------------------- ・Windows XP ・Visual Studio .NET 2003 ・.NET Framework v1.1 ・VBで開発 | ||||
|
投稿日時: 2007-03-02 14:51
ItemDataBoundイベントでやってるんですよね? 使うプロパティとかは間違ってなさそうですが・・・ デバッグした?全行が非表示にする方を通ってない? | ||||
|
投稿日時: 2007-03-02 15:41
かめたろさんレスありがとうございます。
そうなんです。 ItemDataBoundイベント内でやってるんですが・・・ 全行の表示・非表示はできるのですが、 「一行目だけ」非表示ができないのです。 未だ試行錯誤中です。 以下の e.Item.ItemIndex は DataGrid に データバインドされた行数しか取得していません。 実際はもっと行数があるのですが、表示もされません。 例:データバインドされなければいけない行数10行。 実際表示されるのは2行。 データバインドされなければいけない行数は どうやって取得すればいいのか理解できていません。 しかも以下のソースだと削除ボタンが効かなくなってしまいました。 If Session("ID") = "" Then '削除ボタン/一行目非表示・一行目以降表示 Dim i As Integer For i = 0 To e.Item.ItemIndex e.Item.Cells(1).Controls(i).Visible = True Next e.Item.Cells(1).Controls(0).Visible = False Else '削除ボタン全行表示 DataGrid1.Columns(1).Visible = True End If [ メッセージ編集済み 編集者: @beginner 編集日時 2007-03-02 17:00 ] | ||||
|
投稿日時: 2007-03-02 18:03
ああ、コレ、Session("ID") = "" の場合は全行非表示になりそうね。Elseの方もちょっとどうかと・・・。ItemDataBoundはどういうイベントなのか、ItemIndexは何かってところをもう一度確認することをお勧めします。 | ||||
|
投稿日時: 2007-03-05 11:46
かめたろさんレスありがとうございます。
ItemDataBoundはどういうイベントなのか、 ItemIndexは何かってところをもう一度確認したのですが、 いまだ解決にはいたっていません。 まだまだ理解不足で頂いたヒントから発想できていません。 ItemDataBoundでは削除ボタンの全表示か全非表示させるだけで、 別のイベントで特定の削除ボタンの表示・非表示を すればよいのでしょうか。 | ||||
|
投稿日時: 2007-03-05 12:51
確認したけど理解できていないのか。そもそも何を根拠にああいうコードになったのでしょうか。 ItemDataBoundはその行がバインド(コントロールとデータが結びつかられるたびに)される度に発生します。 ItemIndexは大雑把に言えば「その行が何行目なのか」です。それをiとして e.Item.Cells(1).Controls(i) つまり2個目のセルのi番目のコントロール、をとるのはおかしいですよね。 | ||||
|
投稿日時: 2007-03-05 15:52
べるさんレスありがとうございます。
べるさん・かめたろさんに指摘いただいた点を じっくり読んで試行錯誤して下記まできました。 考え方としては理解できてきているでしょうか。 下記より「未だ理解できていないなぁ」と思う点があれば アドバイスしていただけないでしょうか。 よろしくお願いします。 If Session("ID") = "" Then '削除ボタン/1行目非表示・2行目以降表示 'もしデータ連結1行目なら If e.Item.ItemIndex = 0 Then e.Item.Cells(1).Controls(0).Visible = False 'データ連結2行目以降なら ElseIf e.Item.ItemIndex >= 1 Then e.Item.Cells(1).Visible = True End If Else '削除ボタン全表示 DataGrid1.Columns(4).Visible = True End If | ||||
|
投稿日時: 2007-03-05 17:36
Session("ID") は何に使っているんでしょうか? 処理の内容にもよりますが、列の表示、非表示を切り替えるのは DataBind の後にそのまま書いてしまってもいい気がします。 あと、他ではセルの表示、非表示を切り替えているわけで、 Columns(4).Visible で列の表示、非表示を切り替えても 消えたセルが表示されるわけではないですよ。 _________________ かるあ のメモ と スニペット |
1