- - PR -
ASP.NETで更新時にitemはreadonlyです。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-08 01:57
はじめまして。
ASP.NET1.1(VB.NET)を使っています。 予約システムを作ろうとしているのですがdatagritで選択した dataを子画面で表示して各設定を入力してupdateしようとしたところ itemはreadonlyです。とエラーが表示されます。 子画面のdataを親画面に反映させたいのですがどなたかよろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-08-08 09:56
何をどうUpdateしようとしているのか?
どこでエラーが発生しているのか? datagritとは何か? よく分かりませんがトリアーエズ貼っときますね。 更新したデータの反映 | ||||||||
|
投稿日時: 2006-08-08 13:13
datagritはたぶんそういうDataGridがあるんだろうけど、
「data」が具体的に何なのかもわからないし、親画面と子画面の関係もわからないし ソースがないからupdateが何なのかもわからないしエラーが出たコードもわからない。 トリアエーズ貼っておきます。 「プロパティ 'Item' は 'ReadOnly' です。」 「こちら」もご覧ください。 | ||||||||
|
投稿日時: 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のみにしても同じ事象が 起こりました。この処理と似たような処理を行っている、もう一方の プログラムは問題ないため、パニック状態に陥っています。 この説明でもまだ足りないと思いますが、何卒ご教授下さいますよう お願い致します。 | ||||||||
|
投稿日時: 2006-08-09 11:06
こういうことでしょうか?
データグリッドが編集モードにならない | ||||||||
|
投稿日時: 2006-08-09 11:20
「入力した予約時間に予約者のコードを設定しようとしたところ」は日本語として意味がわかりませんでした。 「時間帯分」は仕様をしらないので意味がわかりませんし、「DataSetのみにしても」は 具体的にどういう意味かがわかりませんでした。 デバッグでステップ実行してみて、どこで例外を出しますか? | ||||||||
|
投稿日時: 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しています。 複数件登録すると何か問題はありますでしょうか? 出来が悪くて申し訳ございませんが、再度お教え頂けますでしょうか。 | ||||||||
|
投稿日時: 2006-08-20 16:37
ソースで説明するならまず現象が発生する最小のサンプルを示すべきです。 で、前にも書きましたが「デバッグでステップ実行してみて、どこで例外を出しますか?」 |