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

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增加到数据库,要怎么样处理啊,
我最近对这个列利用表达式很感兴趣.谢谢,高手进来指教!!!




...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

16,554

社区成员

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

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