none
datagridview里面多表联合保存的问题 RRS feed

  • 问题

  •  

    我有一个datagridview控件里面呈现的是一个多表查询的结果,具体的tableadapter里的fill 和 getdata(depName)用到的SQL语句为

    SELECT entity.curdate, entity.pandianNum, entity.curjiecunNum, entity.diaoboNum,
          entity.curduoshouqianNum, entity.curzhaodaiNum, entity.curshouchuNum,
          entity.curlingruNum, entity.prejiecunNum, entity.shoujia, entity.jinjia, entity.danwei,
          entity.name, entity.id, depEntry.depEntryName, dep.depName
    FROM ((dep INNER JOIN
          depEntry ON dep.depNo = depEntry.depNo) INNER JOIN
          entity ON depEntry.depEntryNo = entity.partno)
    WHERE (dep.depName = ?)
    ORDER BY entity.id

     

    他的呈现功能很好,能够按照我预期的以depName(部门名称)为条件,分类呈现,可是我现在想用他的保存功能,我这样设想,

    因为是多表,所以不能用GenerateDBDirectMethods方法,生成Update语句,只能生成手动写update语句,虽然是多表查询,但是只更新一张表,与他关联的它表里的字段都设为只读。

    UPDATE entity SET entity.curdate=?,entity.pandianNum=?,entity.curjiecunNum=?, entity.diaoboNum=?,
          entity.curduoshouqianNum=?, entity.curzhaodaiNum=?, entity.curshouchuNum=?,
          entity.curlingruNum=?, entity.prejiecunNum=?, entity.shoujia=?, entity.jinjia=?, entity.danwei=?,
          entity.name=?

    where  entity.id=?

    下一步就要在程序中使用这个SQL了,在使用具体的SQL的时候,可能要涉及到多行的数据,既不是一条单独的记录,可能是多行的,再具体要怎么写呢,是不是写一个for循环,从第一条记录到最后一条记录,然后每行都执行update语句,那如何取得行号呢,每一个单元格又要怎么取得呢,他的索引是从0开始,还是从1开始的?除此以外还有没有别的好的方案,哪位前辈能解答一下,谢谢了

    2009年1月1日 8:06

答案

  • Hi lz

     

    Tableadapter 的工作方式  是更新表内所有修改过的行  只要你用批量的方式穿入行集合 (datatable,datarow[]) 他都替你进行循环

     

    就算是commandbuilder生成的command 也只有一行更新 循环添入参数的工作是  Idataadepter  内部实现的

    2009年1月2日 4:30

全部回复

  •  

    所以说 一开始的设计就是不大妥当的

    推荐的做法是直接做出所有相关表的 tableadepter

    然后用 adepter 利用参数得到所有相关行  然后帮定

    修改后分别更新每个table

     

     

    lz你列出的这种查询  也不是不可以 但是需要知道每个字段是对应哪一个表  在一个 update command里面执行多条update

    在我看来是得不偿失的

    2009年1月1日 14:10
  •  

    我的更新,只对一个表,它表的字段都设为了只读,

    因为datagridview可能修改多行的数据

    现在我的问题是,如果我更新多行,是不是要写一个for循环,然后多条update语句?如何写这些update语句呢?

    2009年1月2日 2:38
  • Hi lz

     

    Tableadapter 的工作方式  是更新表内所有修改过的行  只要你用批量的方式穿入行集合 (datatable,datarow[]) 他都替你进行循环

     

    就算是commandbuilder生成的command 也只有一行更新 循环添入参数的工作是  Idataadepter  内部实现的

    2009年1月2日 4:30
  •  lz,你的问题解决了吗?我遇到了和你一样的问题,麻烦指点一下,邮箱:jingjunjie86@163.com
    2009年3月26日 14:23