以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]datatable相关方法的异步改造【已解决】 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=129203) |
-- 作者:浙江仔 -- 发布时间:2018/12/24 9:26:00 -- [求助]datatable相关方法的异步改造【已解决】 由于网页异步改造,原来使用datatable的方法也需要改造成sql语句,但是这样工作量偏大,能否重新构建一个类或方法,按照原来方法的格式 比如 原来的 Dim dr As DataRow dr = DataTables("产品").Find("产品编号 = \'03\'") \'找出编号为03的产品是否可以自己构建一个类似的方法 Dim dr As DataRow dr = xDataTables("产品").xFind("产品编号 = \'03\'") \'找出编号为03的产品来达到相同的效果? [此贴子已经被作者于2018/12/27 20:04:41编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/12/24 10:08:00 -- 可以,参考
https://www.w3cschool.cn/vb_net/vb_net_classes_objects.html
|
-- 作者:浙江仔 -- 发布时间:2018/12/25 11:56:00 -- Dim dr As DataRow dr = xDataTablesFind("数据库名","产品","产品编号 = \'03\'") \'找出编号为03的产品做成这个方式倒是可以,但是这个也不好快速替换 最好就是 dr = xDataTables("数据库名","产品").xFind("产品编号 = \'03\'") 能不能做成这个形式? 依葫芦画瓢,云里雾里,甜版能做个范例么?谢谢 [此贴子已经被作者于2018/12/25 11:56:32编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/12/25 12:49:00 -- 参考
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=109912&skin=0
|
-- 作者:浙江仔 -- 发布时间:2018/12/26 9:16:00 -- Public Class myTableCollection Public Sub new Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of Table)
Public readonly Property count() As Integer Public readonly Property contains(tname As String) As Boolean End Class Public mytables = new myTableCollection readonly Property Tables As myTableCollection 代码能解读一下吗? 这代码是调整系统table的方法的功能吗? 那么datatable的SQLFind方法也能自己调整吗? 如果改写成能在异步环境下使用的,需要怎么改呢? 如果官方能直接修改这个方法,让他适用异步环境,那就更好了! |
-- 作者:有点蓝 -- 发布时间:2018/12/26 10:01:00 -- datatable暂时无法支持异步 |
-- 作者:有点甜 -- 发布时间:2018/12/26 15:20:00 -- 以下是引用浙江仔在2018/12/26 9:16:00的发言:
代码能解读一下吗? 这代码是调整系统table的方法的功能吗? 那么datatable的SQLFind方法也能自己调整吗? 如果改写成能在异步环境下使用的,需要怎么改呢? 如果官方能直接修改这个方法,让他适用异步环境,那就更好了!
代码是调整替换tables的方法,这样处理以后,调用tables("xxx")就可以跳转到你自己的代码那里控制了。
1、同样的,你也可以改成datatable。请先看懂代码。
2、如果觉得替换成datatable有可能影响本来的datatable的功能,你也可以改成xdatatable。请先看懂代码。
3、关键看懂下面的用法
readonly Property Tables As myTableCollection |
-- 作者:浙江仔 -- 发布时间:2018/12/27 15:13:00 -- 甜版,需要支援: 1、Datatables(),改成xDatatables() 已经根据可以改好了,不知道是不是对的。 2、SQLFind,改成xFind,使用sqlcommand返回相关数据(datarow),需要怎么放在哪里?之前在全局代码定义了一个xFind(),但是不能和xDatatables()连接在一起,需要单独定义一个参数,用于确定表名,如果去掉表名这个参数,直接和xDatatables("表名").xFind(Filter,Sort,Index),该怎么做? Public Class xdDataTables
Public Sub new
End Sub
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of DataTable)
Return foxtable.DataTables.GetEnumerator
End Function
Default Public readonly Property Item(tname As String) As DataTable
Get
If Foxtable.DataTables.Contains(tname) Then
Return Foxtable.DataTables(tname)
Else
msgbox("测试,不存在表【" & tname & "】")
Return Nothing
End If
End Get
End Property
Public readonly Property count() As Integer
Get
Return foxtable.DataTables.count
End Get
End Property
Public readonly Property contains(tname As String) As Boolean
Get
Return foxtable.DataTables.contains(tname)
End Get
End Property End Class Public mydatatables = new xdDataTables readonly Property xDataTables As xdDataTables Get Return mydatatables End Get End Property 自己定义的函数: Public Function xdFind(stable As String , Filter As String,Optional Sort As String ="" ) As DataRow
Dim Index As Integer=0
If DataTables.Contains(stable) =False Then
msgbox("不存在"+stable)
Return Nothing
End If
Dim sname As String=DataTables(stable).ConnectionName
Dim cmd As new SQLCommand
Dim dt As DataTable
cmd.ConnectionName = sname
If sort > "" Then
cmd.CommandText ="sel ect * from " + stable +" where " + Filter + " order by " + sort
Else
cmd.CommandText = "sel ect * from " + stable +" where " + Filter
End If
dt = cmd.ExecuteReader(True)
If dt.DataRows.count>0 Then
Return dt.DataRows(Index)
End If End Function |
-- 作者:有点甜 -- 发布时间:2018/12/27 15:35:00 -- 在你的 xdDataTables 类里面,定义函数即可。也就是拷贝代码进去。
要增加什么属性、方法,都在class里面定义即可。 |
-- 作者:浙江仔 -- 发布时间:2018/12/27 15:53:00 -- Public Class xdDataTables Public Sub new End Sub Private dname As String Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of DataTable) Return foxtable.DataTables.GetEnumerator End Function Default Public readonly Property Item(tname As String) As DataTable Get If Foxtable.DataTables.Contains(tname) Then dname =tname Return Foxtable.DataTables(tname) Else msgbox("测试,不存在表【" & tname & "】") Return Nothing End If End Get End Property Public readonly Property count() As Integer Get Return foxtable.DataTables.count End Get End Property Public readonly Property contains(tname As String) As Boolean Get Return foxtable.DataTables.contains(tname) End Get End Property Public readonly Property xFind(Filter As String,Optional Sort As String ="" ) As DataRow get Dim sname As String=Foxtable.DataTables(dname).ConnectionName Dim cmd As new SQLCommand Dim dt As DataTable cmd.ConnectionName = sname If sort > "" Then cmd.CommandText ="se lect * from " + dname +" where " + Filter + " order by " + sort Else cmd.CommandText = "se lect * from " + dname +" where " + Filter End If dt = cmd.ExecuteReader(True) If dt.DataRows.count>0 Then Return dt.DataRows(0) End If End get End Property End Class Public mydatatables = new xdDataTables readonly Property xDataTables As xdDataTables Get Return mydatatables End Get End Property 还不行 |