- PR -

DataGrid内の値により削除確認メッセージを・・・

1
投稿者投稿内容
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-10-16 03:41
いつも質問ばかりですいません。

DataGrid内の内容を見て、条件に一致するときは
「削除してよろしいですか?」とメッセージを
表示し、それ以外のときは「削除できません」と
表示させたいと思っています。

@
DataGrid1_ItemDataBoundに
-----------------------------
If DataGrid1.Items(e.Item.ItemIndex).Cells(.Text = 1 then
btn.Attributes("OnClick") = "return confirm('---?')"
endif
-----------------------------
と記述するとエラーになってしまいます。

<エラー内容>
インデックスが範囲を超えています。負でない値で、
コレクションのサイズよりも小さくなければなりません。
パラメータ名 : index

恐らくまだBindされていないからだと思います。

A
次にDataGrid1_ItemCommandに
-----------------------------
If e.CommandName = "Delete" Then
btn.Attributes("OnClick") = "return confirm('---?')"
End If
-----------------------------
と記述すると、削除ボタンを2度押さなければ
メッセージが表示されません。

B
次に押して欲しくない行だけ削除ボタンを表示しないように
してみては?と思ったのですが、方法が全くわかりませんでした。


過去スレッドも探して見たのですが、、、。
申し訳ございませんが、宜しくお願い致します。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2004-10-18 16:26
引用:

恐らくまだBindされていないからだと思います。


「恐らく」ではなく、ステップ実行なりTraceなりで検証しましょう。

コード:
If e.Item.Cells(.Text = 1 then



でよいのでは?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-10-19 14:18
>いつも質問ばかりですいません。

まずは、

.NET Tips/Webフォーム/DataGrid
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html#i14

を一通り読みましょう。

>(1)
DataGrid1_ItemDataBound内で該当行のコントロールは
e.Item.FindControlまたは e.Item.Cells[].Controls[] で
アクセスするべきです。

>(2)
削除ボタンが押されたときのポストバックでDataGrid1_ItemCommandが走って、
btn.Attributes("OnClick") = "return confirm('---?')"
が実行される。
削除ボタンを2度押したときにメッセージが表示のは当然です。


>(3)
[ASP.NET]DataGridコントロールの削除ボタンで確認メッセージを表示するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/104confirmdg/confirmdg.html
のサンプルで

if (押してほしくない行) {
button.Visible = false;
}

もしくは

if (押してほしくない行) {
button.Attributes["OnClick"] = "alert('削除できません');return false;";
}
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-10-19 16:53
皆様、ありがとうございます。

お陰さまで解決いたしました。

DataGridに自動フォーマットのカラフル4を指定して
奇数行に色が付くようにしています。
todo様に教えていただいたボタン非表示をやってみて
気が付きました。
偶数行と奇数行の動きが違っていたのです。

DataGrid1_ItemDataBoundで以下のようにしてしていました。
-----------------------------------------------------
If e.Item.ItemType = ListItemType.SelectedItem OrElse _
e.Item.ItemType = ListItemType.AlternatingItem Then
  ・・・・・・・・
End If
-----------------------------------------------------
色の付いている偶数行のe.Item.ItemTypeの値を調べると
ListItemType.SelectedItemではなく、
ListItemType.Itemであることが分かりました。

ですので、このようにしたらうまくできました。
-----------------------------------------------------
If e.Item.ItemType = ListItemType.Item OrElse _
e.Item.ItemType = ListItemType.AlternatingItem Then
  ・・・・・・・・
End If
-----------------------------------------------------

DataGrid1_ItemDataBound内での該当行のコントロールも
ご指摘通りに変更してエラーがでなくなりました。

検証方法をもう少し考えなければ、と反省いたしました;;
1

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