请教个菜鸟问题,如何实现DATASET这样的类?

老龙友 2009-05-20 04:34:34
请问一下高手

类似于DATASET这样的类,应该如何实现?

比如下面的语句 DataSet1.Tables(0).Rows(0).Item(0)

这里面,Tables,Rows,Item都是怎么实现的?有人知道吗?
...全文
111 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
老龙友 2009-05-22
  • 打赏
  • 举报
回复
给出一些具体的示例代码,帮助一下后来人吧

Public Class DataSet
Public Property Table() as DataTable
'Code Here
End Property
End Class

Public Class DataTable
Public Property Row as DataRow
'Code Here
End Property
End Class

Public Class DataRow
'Code Here
End Class

实际上微软的DataSet里面是DataTable的集合,也就是Tables 而不是简单的Table,因为一个DataSet里面可以有多个Table
但这并不影响原理的表述

如果要把Table换成Tables,还需要有一个DataTables的类
具体可参考以下代码:
(仅为抛砖引玉)

Public Class WXTables
Private _col As Collection

Public ReadOnly Property Col() As Collection
Get
Return _col
End Get
End Property

Public Sub add(ByVal tmpTable As WXTable)

If IsNothing(_col) Then
_col = New Collection
End If
_col.Add(tmpTable)

End Sub
Public Function add(ByVal strKey As String) As WXTable

Dim obj As New WXTable
If IsNothing(_col) Then
_col = New Collection
End If
'obj.ID = FullSampleID
'obj.Desc = Desc

_col.Add(obj, strKey)
Return obj

End Function

Public Sub Remove(ByVal Name As String)
_col.Remove(Name)
End Sub
Public Function Count() As Integer
Return _col.Count
End Function
Public Sub Clear()
_col.Clear()
End Sub
Public Function Item(ByVal Name As String) As WXTable
Return _col(Name)
End Function
Public Function Item(ByVal key As Integer) As WXTable
Return _col(key)
End Function
End Class
老龙友 2009-05-22
  • 打赏
  • 举报
回复
感谢楼上两位的回答


现在我终于知道怎么处理了

原来,当在DataSet后面输入“.”之后,会自动列出“Tables”,是因为“Tables”是“DataSet”的一个属性,而它本身是“DataTable”类。

就是这么简单的一个问题,居然楼上这么多人都没有回答出来。

反而告诉我是“继承”。我们可以清楚地发现,DataSet的结构和“继承”毫无关系。



不知道是否这就是CSDN的文化?答非所问、认为简单(或许并不简单)的问题就不屑回答,对于新人毫无耐心,对问题本身不去回答却怪提问者太菜。。。。


或许这个问题是菜了点,但是为什么我自己最终就能找到如此简单的一个回答,但楼上这么多人却五一能答出呢???


这就是我,一个使用计算机超过13年的(从8086开始),现在被迫用.NET写一个小项目的人对CSDN的感受。


Any way,再次感谢楼上几位朋友的回答。Over。
lkclover 2009-05-21
  • 打赏
  • 举报
回复
是你太菜了 人家都回答你了 还不会
pjagz 2009-05-21
  • 打赏
  • 举报
回复
都是问非所答,难怪新人不懂!看清问题再答!
xgchou 2009-05-21
  • 打赏
  • 举报
回复
说得也是,我也能理解楼主的心情,但这些问题真的是很基础的,如果别人要回答你的话,可能要写上一大段,这是典型的事倍功半.说不定写了一大串还不是很有条理.所以,建议你先看看VB.NET的基础类书籍.也许你会得到更多的收获,可果你说没那么多时间的话,那相信:你即使把这个问题解决了,你会有更多的问题冒出来的.这就像小朋友问人是怎么生出来的一样.
老龙友 2009-05-21
  • 打赏
  • 举报
回复


看来真的没人知道了。。。


这可是菜鸟问题啊。。。。。。。


CSDN全部都是菜鸟吗?????


老龙友 2009-05-21
  • 打赏
  • 举报
回复
楼上的能给个示例吗?
zzWind 2009-05-21
  • 打赏
  • 举报
回复
你如果想了解的很细致,建议你看MSDN。
老龙友 2009-05-21
  • 打赏
  • 举报
回复
真的是我太菜吗?

你看看有一个像样的回答吗?
水如烟 2009-05-20
  • 打赏
  • 举报
回复

类的集合

将上面的组装,便写成dataset之类的了
老龙友 2009-05-20
  • 打赏
  • 举报
回复
感谢楼上的回答:

=======================
想要实现你说的那个类也简单,用类与类之间的相互继承就可以了。比如说我定义一个Class1,里面有一个成员为Class2
然后再定义一个Class2,里面有一个成员为Class3 。。。。。。
=======================

我就是想知道具体如何实现的啊,能否给一小段示例代码?非常感谢!
wang_wei_jie 2009-05-20
  • 打赏
  • 举报
回复
从数据库中导出数据到DataTable:
Dim objDA As New System.Data.SqlClient.SqlDataAdapter("select * from tbl where id=1", _
New System.Data.SqlClient.SqlConnection("server=Local;initial catalog=pubs;"))
Dim objDS As New DataSet
Dim objDT As New DataTable

objDA.Fill(objDS, "tblName")
objDT = objDS.Tables("tblName")

objDT就是objDS.tables(0)
objDT.Rows(0).Item(0)就是表的第一行第一列的值

想要实现你说的那个类也简单,用类与类之间的相互继承就可以了。比如说我定义一个Class1,里面有一个成员为Class2
然后再定义一个Class2,里面有一个成员为Class3 。。。。。。
老龙友 2009-05-20
  • 打赏
  • 举报
回复
没有人知道吗?

失望啊。。。
老龙友 2009-05-20
  • 打赏
  • 举报
回复
感谢楼上朋友的回答

不过我其实想知道的是,在形如DataSet的类结构里

Table、Row、Item的关系是怎样实现的?

也就是说,为什么Row是必须属于Table的,而Table又是必须属于DataSet的?而Row就不能直接属于DataSet?是什么在限制着它?



另外,我如果要自己写一个程序来实现类似DataSet这种结构,也就是说可以使用形如:Class1.Class2(0).Class3(0).Class4 这样的语句,应该怎么写?能否给一个比较简单的例子?
wclaccp 2009-05-20
  • 打赏
  • 举报
回复
Public Function GetAllProductTable() As IList(Of ProductTable)

Dim sqlAll As String = "SELECT * FROM ProductTable"


Return GetProductTablesBySql(sqlAll)



End Function


Private Function GetProductTablesBySql(ByVal safeSql As String) As IList(Of ProductTable)

Dim list As List(Of ProductTable) = New List(Of ProductTable)()
Dim cs As New CompanyTypeTableService
Try

Dim db As New DBHelper()

Dim ds As DataSet = db.GetDataSet(safeSql, CommandType.Text)
Dim row As DataRow
For Each row In ds.Tables(0).Rows

Dim productTable As ProductTable = New ProductTable()
productTable.pid = Convert.ToInt32(row("PID"))
productTable.name = row("Name").ToString()
productTable.image = row("Image").ToString()
' productTable.c = cs.GetCompanyTypeTableByCID(Convert.ToInt32(row("PID"))) 'FK

list.Add(productTable)
Next

Catch e As Exception

End Try

Return list
End Function

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧