急!!!我希望DBGrid实现ListView列表显示时的checkbox功能,我只是希望选种我需要的数据,不希望因此而在表中加个bool字段,请问大侠怎么办?我试过 Ehlib 和 InfoPower ,但他们都是把一个字段用checkbox来改变值,而我不想改变现在的数据表,只想选种我要的记录,真是的,怎么这么难!

解决方案 »

  1.   

    有个控件叫DataTable可以
    cxGrid也可以
      

  2.   

    两种方案:
    1、sql语句改一下:select cast(0 as bit) as isSelected, .....
    2、用DBGrid的MutiSelect,
      

  3.   

    我用的是mysqlselect cast(0 as bit) as isSelected 用不了啊
      

  4.   

    tadvstringgrid能实现你说的功能,tmspack里面的
    不过用起来稍微有些繁琐
      

  5.   

    我用的是mysqlselect cast(0 as bit) as isSelected 用不了啊
      

  6.   

    select *, 0=1 as isSelected  from .....
      

  7.   

    懒得试了,这样肯定可以。
    ado控件的话,查询后需要FieldByName('isSelected').ReadOnly := False;否则,改不了的。
      

  8.   

    不知道是不是我太苯了,流亡帅哥的方法怎么试都不能改checkbox的值,ReadOnly := False;我都做了,怎么会事啊!
      

  9.   

    你用的是bde还是ado?
    数据集要设成可写,缓存更新(如果 要提交修改的话,要注意一下isSelected字段)。
    BDE的TQuery,设CachedUpdates := True;
    ADO,设LockType := ltBatchOptimistic;
      

  10.   

    如果不想原表中增加一个字段,可以使用临时表,我就是这样做的使用adoquery增加一个varchar(1)字段,初始为空
    adoquery.sql := select ' ' as Checked * into #tmptalbe from table1 where ...select * from #tmptable 点击的时候修改Checked值:
    adoquery.edit;
    if ((Column.fieldname = Checked) and (adoquery.fieldbyname("checked").asstring = " ")) then
        adoquery.fieldbyname("checked").asstring = "Y"
    else 
    if ((Column.fieldname = Checked) and (adoquery.fieldbyname("checked").asstring = "Y")) then
        adoquery.fieldbyname("checked").asstring = " "
    根据Checked值重画
      

  11.   

    你还可以用第三方控件(dxDBGrid)实现此功能
      

  12.   

    我用的DAC连接Mysql数据库:mySQLDatabase->mySQLQuery->DataSource->DBGridEhmySQLQuery.CachedUpdates := True;我设了,ReadOnly := False;我也设了,看来是没办法了,我只好加个字段了,哎,居然没有我要的控件,看来只好增加一个字段了
      

  13.   

    楼上说的控件我都试过了,但都是使一个“字段”可以用checkbox的形式显示或改变,我要的是像ListView列表显示时的那种checkbox,一选就是一整条记录,显然,没有符合此要求的控件,看来控件种类并不是我想象中的那么丰富!失望啊~~~~~~
      

  14.   

    其实不用外加字段的啊检查是否选中,只要检查ListView就可以了!