- - PR -
Gridviewの一括更新:インデックスが配列の境界外、でエラー
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-01-06 15:46
http://msdn.microsoft.com/ja-jp/library/aa992036(VS.80).aspx
これを参考に Gridviewの一括更新を作成しました。 CD、DTが主キーで、変更可能なのはtxtPriceです。 Protected Function IsRowModified(ByVal r As GridViewRow) As Boolean Dim currentITEM As String = GridView1.DataKeys(r.RowIndex).Values("CD").ToString Dim currentDT As String = Format(GridView1.DataKeys(r.RowIndex).Values("DT"), "yyyy/MM/dd").ToString Dim currentPrice As String = CType(r.FindControl("txtPrice"), TextBox).Text Dim dRow As System.Data.DataRow = _ dDtTable.Select(String.Format("CD= '" & currentITEM & "'", "DT= '" & currentDT & "'"))(r.RowIndex) ↑ここで「インデックスが配列の境界外です。」で落ちてしまいます。 If Not currentUp.Equals(dRow("UP").ToString()) Then Return True End If Return False End Function マイクロソフトのサンプルでは、 Dim row As System.Data.DataRow = _ originalDataTable.Select(String.Format("EmployeeID = {0}", currentID))(0) となっていたので、同じように Dim dRow As System.Data.DataRow = _ dDtTable.Select(String.Format("CD= '" & currentITEM & "'", "DT= '" & currentDT & "'"))(0) としたところ、GridViewの1行目の値しか見に行っていませんでした。 そこで、r.RowIndexで行数を指定するようにしたのですが… 基本的なところが全くわかっていませんが、よろしくお願いします。 | ||||
|
投稿日時: 2009-01-06 16:11
自己レスです。
以前はうまくいなかったのですが、↓に変更したらうまくいくようになりました。 検索条件を 「,」⇒「AND」にも変更しました。 Dim dRow As System.Data.DataRow = _ dDtTable.Select(String.Format("CD= '" & currentITEM & "' AND DT= '" & currentDT & "'"))(0) If Not currentUp.Equals(dRow("UP").ToString()) Then Return True End If [ メッセージ編集済み 編集者: まなか 編集日時 2009-01-06 16:22 ] | ||||
|
投稿日時: 2009-01-06 16:25
エラーが発生する場所がわかっているのであればデバッグポイントを設置して解決出来ると思います。
下記のいずれかが想定されている物と違うのではないでしょうか。
【追記】 String.Format("EmployeeID = {0}", currentID) を書き換えて String.Format("CD= '" & currentITEM & "'", "DT= '" & currentDT & "'") って言うのがそもそもおかしくないでしょうか。 サンプルのこの箇所は何をしているかわかりますか? [ メッセージ編集済み 編集者: King 編集日時 2009-01-06 16:38 ] | ||||
|
投稿日時: 2009-01-07 09:22
Kingさん、ありがとうございます。
String.Format("EmployeeID = {0}", currentID) はEmployeeIDを数値型で指定しているので、Stringに変えている、でいいでしょうか? とすると、私のコードのString.Format は必要ないですね… | ||||
|
投稿日時: 2009-01-07 10:07
{0}はプレースホルダです。 下記を参照して下さい。 http://msdn.microsoft.com/ja-jp/library/fht0f5be(VS.80).aspx 他のコードについても意味がわからず書いている箇所があるのでしょうか。 時間が無いのかもしれませんが、 サンプルを使用する際は何をしているかをきっちり理解したほうが良いと思います。 google で検索したら何でもすぐ出てきますしね。 【追記】 デバッグでエラーが出る行のそれぞれの値や内容の確認はやりましたか? [ メッセージ編集済み 編集者: King 編集日時 2009-01-07 10:35 ] | ||||
|
投稿日時: 2009-01-07 13:16
はい…意味がわからず、エラーが起きたときに対応できない状況です。 Googleで調べてもいますがなかなか、といったところです。 デバッグでの確認は行いました。 ありがとうございます。 |
1