• 全部
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API
  • 问答

一个觉得有点高深的问题,在列上使用表达式出现错误, 盼望高手的出现

wqjch 2005-04-02 11:23:46
Dim dt1 As New DataTable("dt1")
Dim WithEvents dt2 As New DataTable("dt2")

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ds As New DataSet("ds")

dt1.Columns.Add("Matcode", GetType(String))
dt1.Columns.Add("Qty", GetType(Double))

dt2.Columns.Add("Matcode", GetType(String))
dt2.Columns.Add("Matcolor", GetType(String))
dt2.Columns.Add("Qty", GetType(Double))

ds.Tables.Add(dt1)
ds.Tables.Add(dt2)

Dim relation As New DataRelation("relation", dt1.Columns("MatCode"), dt2.Columns("MatCode"))
ds.Relations.Add(relation)
dt1.Columns("Qty").Expression = "Sum(Child(relation).Qty)"

Me.DataGrid1.DataSource = dt1
Me.DataGrid2.DataSource = dt2
End Sub
我在dt1和dt2这两个表建立了关联Dim relation As New DataRelation("relation", dt1.Columns("MatCode"), dt2.Columns("MatCode"))
我想使用表达式把子表(dt2)的列(Qty)的和赋给父表(dt1)的列(Qty)
dt1.Columns("Qty").Expression = "Sum(Child(relation).Qty)"
但是有点问题,请高手指教,谢谢!!!

就是当表达式为:dt1.Columns("Qty").Expression = "Sum(Child(relation).Qty)"时,就会出现一个题在datagrid2填的Qty不会直接累加到datagrid1的Qty

Private Sub dt2_ColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles dt2.ColumnChanged
DataGrid1.Invalidate()
End Sub

我在dt2的列改变事件:加一句DataGrid1.Invalidate(),可以解决,但是还是有一个问题:就是如果我在dt2输入Qty后不换行的话,它也不会把dt2的Qty累加到dt1的Qty.请高手指教

如果我的表是从数据库的读出来的
怎么样把dt1的Qty增加到数据库里啊,
谢谢!!!
因为我试过了一下表从数据库读出来时,它不会把dt1 的qty增加到数据库,要怎么样处理啊,
我最近对这个列利用表达式很感兴趣.谢谢,高手进来指教!!!




...全文
107 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hamadou 2005-04-06
1.对于这个问题,可以如下操作:
Private Sub dt2_ColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles dt2.ColumnChanged
If e.Column.ColumnName = "Qty" Then
Me.BindingContext(dt2, "").EndCurrentEdit() '不用换行来实现刷新了
DataGrid1.Refresh() '实现了一行内列变化使得刷新成功
End If
End Sub
2.对于更新就麻烦些了,因为存在着计算表达式,所以不允许直接更新的。你可以写sql语句,循环更新进去。或者干脆不这么用。使用dt2.ColumnChanged事件,在里面来修改dt1的值,然后刷新一下应该可以。刷新方法见上面。
回复
wqjch 2005-04-04
自己up
回复
wqjch 2005-04-03
好心人帮我顶啊
回复
usersmj 2005-04-03
我也在正研究Expression 这个问题
回复
wqjch 2005-04-03
在线等待,盼望高手出现
格式化datagrid时进行列中textbox的事件委托
textbox的验证事件中去触发DataGrid的Invalidate
能具体一点吗?
textbox的验证事件是哪个啊,
我在textbox的leave事件写了dataGrid.Invalidate没有用啊
回复
wqjch 2005-04-03
呵呵,
用dataadapter来update不用可以,
你要自己试一下才知道的,
回复
landlordh 2005-04-03
1.格式化datagrid时进行列中textbox的事件委托
textbox的验证事件中去触发DataGrid的Invalidate

2.你可以用dataadapter来update,具体的代码,请查阅以前的贴
回复
wqjch 2005-04-03
自己up
回复
相关推荐
发帖
VB
创建于2007-09-28

1.6w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
帖子事件
创建了帖子
2005-04-02 11:23
社区公告
暂无公告