我想知道是否可以通过DataGridView将数据添加到DataTable并通过序列化将数据保存在DataTable中 - 所有这一切都无需创建底层数据库。一个DataTable足以满足我试图存储的数据量,而且数据库绝对有点过分。
谢谢!
答案 0 :(得分:1)
我不认为我理解你关于序列化的问题。
如果将DataTable分配给DataGridView DataSource属性,则在表单中输入数据时,它将自动添加到DataTable中。
如果要将数据保存在DB外的DataTable中,则应使用DataTable WriteXml()方法(和ReadXml()来加载数据)。如您所见,数据以xml格式序列化。
答案 1 :(得分:0)
不仅可行,而且相当简单。我正在使用包含数据表的数据集,该数据集使用datagridviews进行输入。 dgv使用bindingsources作为其数据源,bindingsource将数据集作为其数据源,数据表作为datamember。
我将数据集序列化为SQL Server中的varbinary(max)列。
(我在我的业务对象上使用强类型属性,但这应该会给你一个想法)
'-- Copy dataset to property
'-- Establish locals
Dim loFormatter As New BinaryFormatter()
Dim loStream As New System.IO.MemoryStream()
'-- Serialize the business object
loFormatter.Serialize(loStream, Me.DsPolicies1)
'-- Return the created stream
Me.PoliciesBO1.Dataset_Bytes = loStream.ToArray()
导航策略记录时,将对该属性进行反序列化
If Me.PoliciesBO1.Count > 0 And Me.PoliciesBO1.CurrentRowIndex >= 0 Then
Me.clear_bindingsources()
Dim loformatter As New BinaryFormatter()
Dim lomemorystream As MemoryStream = _
New MemoryStream(Me.PoliciesBO1.Dataset_Bytes, 0, _
Me.PoliciesBO1.Dataset_Bytes.Length, True)
Me.DsPolicies1 = _
CType(loformatter.Deserialize(lomemorystream), dsPolicies)
'-- Rehook datasource
Me.rehook_Bindingsources()
Me.refresh_dgvs()
最后两个sub只是重置每个表的bindingsource数据源和datamember,然后刷新每个dgv
(我使用这些来收集数据以填写PDF表格)
唯一棘手的部分是记住数据源必须在新记录上为空,并且必须在“父”记录指针移动后从数据中完全重新加载。