ハンドソンテーブルのデータをデータベースに保存するための一般的に受け入れられているパターンはありますか?
ajax と WCF サービスを使用してデータベースからデータを取得し、テーブルにデータを入力しています。サービスは、データベース テーブルのデータ行を表すオブジェクトのリストを返しています。
WCF:
<ServiceContract(Namespace:="")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class TableService
<OperationContract()>
<WebGet(ResponseFormat:=WebMessageFormat.Json)>
Public Function GetResource() As List(Of Resource)
Dim conn = <some connection string>
Dim sql = <some SQL>
Dim dt = New DataTable("foo")
Using da As New SqlDataAdapter(sql, conn)
da.Fill(dt)
End Using
Return Objectify(dt)
End Function
Private Function Objectify(dt As DataTable) As List(Of Resource)
Dim resourceTable = New List(Of Resource)
For Each row As DataRow In dt.Rows
resourceTable.Add(New Resource With {
.ResourceAllocationID = row("ResourceAllocationID"),
.ResourceName = row("ResourceName"),
.AllocationPercent = row("AllocationPercent"),
.Month = row("Month"),
.Year = row("Year"),
.Comments = row("Comments"),
.ProjectID = row("ProjectID"),
.ResourceUId = row("ResourceUId")})
Next
Return resourceTable
End Function
End Class
Public Class Resource
Public Property ResourceAllocationID As Integer
Public Property ResourceName As String
Public Property AllocationPercent As Integer
Public Property Month As String
Get
Return _monthName
End Get
Set(value As String)
Dim intMonth As Integer
If Integer.TryParse(value, intMonth) Then
If [Enum].IsDefined(GetType(MonthName), intMonth) Then
_monthName = CType(value, MonthName).ToString
End If
Else
If [Enum].IsDefined(GetType(MonthName), value) Then
_monthName = value
End If
End If
End Set
End Property
Public Property Year As Integer
Public Property Comments As String
Public Property ProjectID As Integer
Public Property ResourceUId As String
Private _monthName As String
Public Enum MonthName
January = 1
February = 2
March = 3
April = 4
May = 5
June = 6
July = 7
August = 8
September = 9
October = 10
November = 11
December = 12
End Enum
End Class
Javascript:
$("#container").handsontable({
contextMenu: true,
startRows: 1,
minRows: 1,
colHeaders: ['Year', 'Month', 'Name', '% Allocation', 'Comments'],
colWidths: [52, 100, 150, 100, 200],
columns: [
{ data: 'Year', type: 'numeric' },
{ data: 'Month' },
{ data: 'ResourceName' },
{ data: 'AllocationPercent', type: 'numeric' },
{ data: 'Comments' }
]
});
$.ajax({
url: "TableService.svc/GetResource",
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$("#container").handsontable(loadData, data.d)
},
error: function (error) {
alert("Error: " + error);
}
});
これは、テーブルを埋めるために美しく機能します。私が苦労しているのは、変更をデータベースに保存する方法です。要件は、すべての変更が完了して更新ボタンが押されるまで、変更を保存しないことです。
を呼び出すことで、テーブル内のすべてのセルを含むオブジェクトを取得できることを知っていますhandsontable.getData()
。私が考えているのは、オブジェクトを Json にシリアル化し、それをサービスに送り返し、逆シリアル化してオブジェクトのリストに戻し、リスト内の各オブジェクトのデータベースを更新する必要があるということです。私は正しい軌道に乗っていますか?もしそうなら、実際にどのように実装しますか?