- PR -

ASP.NETで更新時にitemはreadonlyです。

投稿者投稿内容
グロース
会議室デビュー日: 2006/08/08
投稿数: 9
投稿日時: 2006-08-08 01:57
はじめまして。
ASP.NET1.1(VB.NET)を使っています。
予約システムを作ろうとしているのですがdatagritで選択した
dataを子画面で表示して各設定を入力してupdateしようとしたところ
itemはreadonlyです。とエラーが表示されます。
子画面のdataを親画面に反映させたいのですがどなたかよろしくお願いいたします。
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-08-08 09:56
何をどうUpdateしようとしているのか?
どこでエラーが発生しているのか?
datagritとは何か?
よく分かりませんがトリアーエズ貼っときますね。
更新したデータの反映
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-08 13:13
datagritはたぶんそういうDataGridがあるんだろうけど、
「data」が具体的に何なのかもわからないし、親画面と子画面の関係もわからないし
ソースがないからupdateが何なのかもわからないしエラーが出たコードもわからない。
トリアエーズ貼っておきます。
プロパティ 'Item' は 'ReadOnly' です。

こちら」もご覧ください。
グロース
会議室デビュー日: 2006/08/08
投稿数: 9
投稿日時: 2006-08-09 05:25
説明が少なくて申し訳ございません。
こちらを内容を拝見させて頂き、説明不足とは思いましたが、
.NET初心者なものですから、ご容赦下さい。

出来る限り説明させて頂きますと、
VB.NETでMDBファイルのデータベースを使用しています。(Webアプリです)
まず、親画面に担当者と時間ごとの予約者のデータを表示させています。
(例)
10:00 11:00 12:00 〜
担当者A 000001 000002

その処理が以下になります。
Sub BindDataGrid()
Dim strSQL As String = "Select * From S_予約"
Dim ds AS DataSet = CreateDataSet(strSQL)
mdt = ds.Tables(0)
mdt.PrimaryKey = New DataColumn() {mdt.Columns("予約CD")}
Dim strSQL2 As String = "SELECT * FROM S_予約 WHERE S_予約.稼働日 = ? ORDER BY 社員CD, 予約行"
With dgrdCustomers
.DataSource = CreateYoyakuDataReader(strSQL2)
.DataSource = ds.Tables(0)
.DataKeyField = "予約CD"
.DataBind()
.SelectedIndex = Iif(ViewState("SelectedIndex") Is Nothing, 0, ViewState("SelectedIndex"))
mYoyaku = .DataKeys(0)
ViewState("予約CD") = mYoyaku
End With
Session("S_予約") = mdt
End Sub

その後、担当者を選択したら子画面を表示させて、予約者のコードや予約時間の
設定を行っています。親画面から受け取ったデータをFindで検索して、入力した
予約時間に予約者のコードを設定しようとしたところ、ItemはReadOnlyです。
と表示されました。

Dim dr As DataRow = mdt.Rows.Find(strYoyakuCD)
dr.BeginEdit
     Dim j As Integer = 1
If 1 >= w_startmenu Then
If j <= w_max Then
dr("メニュー1") = w_menu
dr("予約者NO1") = Int32.Parse(txtYoyakusya.Text)
j = j + 1
Else
dr("メニュー1") = 0
dr("予約者NO1") = DBNull.Value
End If
Else
dr("メニュー1") = 0
dr("カルテNO1") = DBNull.Value
End If

この処理が時間帯分続きます。

べるさんが貼り付けて下さった過去の投稿も読ませて頂いたんですが、
よく理解できていないためか、今一よく分かりません。
DataReaderは読込専用と他にあったのでDataSetのみにしても同じ事象が
起こりました。この処理と似たような処理を行っている、もう一方の
プログラムは問題ないため、パニック状態に陥っています。
この説明でもまだ足りないと思いますが、何卒ご教授下さいますよう
お願い致します。
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-08-09 11:06
こういうことでしょうか?
データグリッドが編集モードにならない
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-09 11:20
引用:
この処理と似たような処理を行っている、もう一方の
プログラムは問題ないため、パニック状態に陥っています。

そのプログラムとの差異を見比べてみたらいかがですか?

「入力した予約時間に予約者のコードを設定しようとしたところ」は日本語として意味がわかりませんでした。
「時間帯分」は仕様をしらないので意味がわかりませんし、「DataSetのみにしても」は
具体的にどういう意味かがわかりませんでした。

デバッグでステップ実行してみて、どこで例外を出しますか?
グロース
会議室デビュー日: 2006/08/08
投稿数: 9
投稿日時: 2006-08-20 07:20
Yamさん、べるさんご返答ありがとうございます。
しばらく、仕事を離れていましたので、
お返事が遅くなりまして申し訳ございません。

どうも原因はデータにあるのではないかと思います。
他の処理では、1件登録したデータを後から更新するのは問題ありません。

今回の処理は、
予約日(今日なら8/20)のデータがない場合には、
担当者の人数分、データを登録しています。
処理は以下の通りです。

Dim strSQL As String = "SELECT * FROM S_予約"
Dim ds As DataSet = CreateDataSet(strSQL)
mdt = ds.Tables(0)
mdt.PrimaryKey = New DataColumn() {mdt.Columns("予約CD")}

For Each dr In dt.Rows
w_Lyoyaku = dr("最大予約数")

For i As Integer = 1 To w_Lyoyaku Step 1
dr2 = mdt.NewRow
dr2("予約CD") = CStr(dr("店舗CD")) & strYear & strMonth & strDay & CStr(intYoyakuNo)
dr2("店舗CD") = dr("店舗CD")
dr2("稼働日") = CDate(txtDay.Text)
dr2("予約NO") = intYoyakuNo
dr2("社員CD") = dr("社員CD")
dr2("予約行") = i
dr2("店舗名称") = dr("社員名称")
dr2("社員名称") = dr("社員名称")
dr2("メニュー1") = 0
dr2("予約者NO1") = 0
dr2("メニュー2") = 0
dr2("予約者NO2") = 0
dr2("メニュー3") = 0
dr2("予約者NO3") = 0

dr2("メニュー48") = 0
dr2("予約者NO48") = 0
dr2("レコード作成日") = Now
mdt.Rows.Add(dr2)

intYoyakuNo = intYoyakuNo + 1
Next i
Next
Return InsertDummyDataTable(strSQL)

Function InsertDummyDataTable(strSQL As String, _
Optional strConnectionString As String = "conStringAcc") As String
Dim con As New OleDbConnection( _
ConfigurationSettings.AppSettings(strConnectionString))
Dim da As New OleDbDataAdapter(strSQL, con)
Dim cb As New OleDbCommandBuilder(da)
Dim strMessage As String

Try
da.Update(mdt)
strMessage = "正常終了!"
Catch
strMessage = "異常終了!"
End Try
Return strMessage
End Function

登録した後に、再度データを読み込んでDataGridに
Bindしています。
複数件登録すると何か問題はありますでしょうか?

出来が悪くて申し訳ございませんが、再度お教え頂けますでしょうか。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-20 16:37
引用:
予約日(今日なら8/20)のデータがない場合には、
担当者の人数分、データを登録しています。

そちらの仕様の話をされてもちょっとわかりません。

引用:
処理は以下の通りです。

ソースを書かれても、こちらで動くわけがないのでわかりません。「dt」とかどこからくるのかわからないし。

ソースで説明するならまず現象が発生する最小のサンプルを示すべきです。

で、前にも書きましたが「デバッグでステップ実行してみて、どこで例外を出しますか?」

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