以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  强制刷新问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=23313)

--  作者:jiskin
--  发布时间:2012/9/8 16:50:00
--  强制刷新问题

以下是一个将临时表内容保存到商品出库的表中的代码

在代码最后我想强制刷新商品出库表中的单价列,

DataTables("商品出库").DataCols("单价").RaiseDataColChanged()

这句代码会刷新所有列,我只需要刷新当前填入数据的那几列就可以了,不知道该如何去改 谢谢!

 

 

If DataTables("出库").datarows.count < 1 Then
    messagebox.show("表中数据为空!")
Else
    Dim dr1 As DataRow
    Dim dt As DataTable = DataTables("出库")
    Dim r As Integer
    r = Tables("商品出库").FindRow("[出库日期] Is null", 0 , False ) \'从当前行开始查找
    If r >= 0 Then \'如果找到的话
        Tables("商品出库").Position = r \'定位到找到的行.
        For Each dr As DataRow In dt.datarows
            dr1 = DataTables("商品出库").DataRows(r)
            For Each dc As DataCol In dt.datacols
                dr1(dc.name) = dr(dc.name)
            Next
        Next
    Else
        For Each dr As DataRow In dt.datarows
            dr1 = DataTables("商品出库").DataRows.addnew()
            For Each dc As DataCol In dt.datacols
                dr1(dc.name) = dr(dc.name)
            Next
        Next
    End If
    DataTables("商品出库").save()
    DataTables("出库").DataRows.Clear() \'清除所有行
    DataTables("商品出库").DataCols("单价").RaiseDataColChanged()
    e.Form.Close()
End If


--  作者:lin_hailun
--  发布时间:2012/9/8 16:54:00
--  
看看

http://www.foxtable.com/help/topics/1468.htm
--  作者:jiskin
--  发布时间:2012/9/8 16:56:00
--  
以下是引用lin_hailun在2012-9-8 16:54:00的发言:
看看

http://www.foxtable.com/help/topics/1468.htm

 

看过了…… 就是不知道该如何表示刚写入的那几行~


--  作者:狐狸爸爸
--  发布时间:2012/9/8 17:04:00
--  

你的意思是要填充有数据的列,没有数据的列就不填充?

如果这样:

 

 

If DataTables("出库").datarows.count < 1 Then
    messagebox.show("表中数据为空!")
Else
    Dim dr1 As DataRow
    Dim dt As DataTable = DataTables("出库")
    Dim r As Integer
    r = Tables("商品出库").FindRow("[出库日期] Is null", 0 , False ) \'从当前行开始查找
    If r >= 0 Then \'如果找到的话
        Tables("商品出库").Position = r \'定位到找到的行.
        For Each dr As DataRow In dt.datarows
            dr1 = DataTables("商品出库").DataRows(r)
            For Each dc As DataCol In dt.datacols
                If dr.IsNull(dc.name) = False
                    dr1(dc.name) = dr(dc.name)
                End If
            Next
        Next
    Else
        For Each dr As DataRow In dt.datarows
            dr1 = DataTables("商品出库").DataRows.addnew()
            For Each dc As DataCol In dt.datacols
                If dr.IsNull(dc.name) = False
                    dr1(dc.name) = dr(dc.name)
                End If
            Next
        Next
    End If
    DataTables("商品出库").save()
    DataTables("出库").DataRows.Clear() \'清除所有行
    DataTables("商品出库").DataCols("单价").RaiseDataColChanged()
    e.Form.Close()
End If


--  作者:lin_hailun
--  发布时间:2012/9/8 17:10:00
--  
以下是引用jiskin在2012-9-8 16:56:00的发言:

 

看过了…… 就是不知道该如何表示刚写入的那几行~


在修改表的地方保存写入的行,最后根据数据循环更新。
[此贴子已经被作者于2012-9-8 17:10:58编辑过]

--  作者:jiskin
--  发布时间:2012/9/8 19:57:00
--  
以下是引用狐狸爸爸在2012-9-8 17:04:00的发言:

你的意思是要填充有数据的列,没有数据的列就不填充?

如果这样:

 

 

If DataTables("出库").datarows.count < 1 Then
    messagebox.show("表中数据为空!")
Else
    Dim dr1 As DataRow
    Dim dt As DataTable = DataTables("出库")
    Dim r As Integer
    r = Tables("商品出库").FindRow("[出库日期] Is null", 0 , False ) \'从当前行开始查找
    If r >= 0 Then \'如果找到的话
        Tables("商品出库").Position = r \'定位到找到的行.
        For Each dr As DataRow In dt.datarows
            dr1 = DataTables("商品出库").DataRows(r)
            For Each dc As DataCol In dt.datacols
                If dr.IsNull(dc.name) = False
                    dr1(dc.name) = dr(dc.name)
                End If
            Next
        Next
    Else
        For Each dr As DataRow In dt.datarows
            dr1 = DataTables("商品出库").DataRows.addnew()
            For Each dc As DataCol In dt.datacols
                If dr.IsNull(dc.name) = False
                    dr1(dc.name) = dr(dc.name)
                End If
            Next
        Next
    End If
    DataTables("商品出库").save()
    DataTables("出库").DataRows.Clear() \'清除所有行
    DataTables("商品出库").DataCols("单价").RaiseDataColChanged()
    e.Form.Close()
End If

 

狐爸 不是填充有数据列 ,数据是这样的, 录入数据会先存在“入库”的临时表里面(比如某次录入了4条数据),然后按了保存按钮(以上代码就是保存按钮中的代码)会一起保存到“商品入库”的数据表里面,我的需要的就是DataTables("商品出库").DataCols("单价").RaiseDataColChanged()
 这条代码仅对这次录入的数据(比如这4条数据)列的“单价”进行强制刷新,而不是整个“商品入库”表都刷新!不然效率肯定低的

[此贴子已经被作者于2012-9-8 19:57:56编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/9/9 10:23:00
--  

搞不懂你说的意思。

而且最好不要这么设计,直接在商品入库表输入即可,输入错误后,可以撤销和删除啊。

再说了,临时表输入数据后,需要转入到正是的数据表,关RaiseDataColChanged什么事?

 

直接:

http://www.foxtable.com/help/topics/1533.htm

 


--  作者:布莱克朱
--  发布时间:2012/9/9 10:44:00
--  
楼主 不明白 了 既然已经填充了  不就是已经触动列了吗  为什么还要去刷新呀!
--  作者:jiskin
--  发布时间:2012/9/9 13:09:00
--  
以下是引用布莱克朱在2012-9-9 10:44:00的发言:
楼主 不明白 了 既然已经填充了  不就是已经触动列了吗  为什么还要去刷新呀!

我也不知道为什么,发现上面那段填充的代码 将临时表内容填写到数据表之后 并不触动列,我就只好想到RaiseDataColChanged 这个了……

[此贴子已经被作者于2012-9-9 13:11:38编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/9/9 15:12:00
--  

按道理填充数据就会触发DataColChanged事件,最好仔细i检查一下代码。

 

如果搞不定,就将就下面的思路来处理吧:

 

Dim cnt As integer = DataTables("商品入库").DataRows.Count
填充数据到商品入库表
For i as integer = cnt To DataTables("商品入库").DataRows.Count - 1
     Dim dr As Datarow = DataTables("商品入库").DataRows(i)
     DataTables("商品入库").DataCols("单价").RaiseDataColChanged()
Next