datasourceプロパティを使用してデータテーブルから入力されたdatagridviewがあります。データベースに影響を与えずにセルの値を変更する必要があります。これまでのところ、最初にデータバインドされたアイテムを変更する必要があることだけがわかりましたが、その方法に関する情報はありませんでした。また、データバインドされたアイテムを変更したくありません。
これを実行したい理由は、開始時刻と終了時刻のレコードのリストがあり、秒単位で差を与える計算フィールドがあるためです。計算フィールドの値を変更し、それに応じて行の高さを変更する必要があります。つまり、各行の高さは、それが表す期間に比例します。変更は、「増加」ボタンを押したままにするとすばやく増加するテキストボックスから行われるため、増加するたびにデータベースを変更することはできません。むしろ、テーブルの値を頻繁に変更し、増分が停止したらデータベースを更新します。
このコードを使用してdatagridviewを直接更新しようとしました:
dgvTasks.Rows(SelectedRowIndex).Cells(5).Value = DateAdd(DateInterval.Minute, DateDiff(DateInterval.Minute, CDate("00:00:00"), CDate(txtDuration.Text & ":00")), dgvTasks.Rows(SelectedRowIndex).Cells(4).Value)
しかし、エラーを受け取ります:
System.Data.ReadOnlyException:列'Column1'は読み取り専用です。
また、データテーブルを更新し、計算列を更新できるようにしてみました。
dtblTasks.Rows(SelectedRowIndex)(5) = DateAdd(DateInterval.Minute, DateDiff(DateInterval.Minute, CDate("00:00:00"), CDate(txtDuration.Text & ":00")), dtblTasks.Rows(SelectedRowIndex)(4))
dgvTasks.DataSource = dtblTasks
ただし、計算値は変わりません。
また、(SQLで)追加の計算値を提供しています。ここで、分単位の差を見つけ、それに文字列リテラルを追加します。
( CAST ( DATEDIFF(MINUTE, Tasks.TaskStart, Tasks.TaskEnd) AS NVARCHAR(10) ) + ' mins') AS TaskDurationString
グリッドをデータソースから切り離し、データをデータグリッドに表示したまま、(データバインドされたオブジェクトに影響を与えずに)操作する方法はありますか?それとも、この問題に対する他のアプローチですか?