首页 > 其他分享 >在DGgrid中使用下拉组合框

在DGgrid中使用下拉组合框

时间:2023-07-07 23:14:55浏览次数:40  
标签:begin end 组合 DBComboBox1 DBGrid1 使用 DGgrid Astrings Rect

  在数据库程序中,特别是ERP中,在DBgrid中使用下拉组合框的情况十分常见,比如,一个产品有几个规格,当我输入了某个产品后,希望规格给出选项,因为规格一般是固定哪几种,手动输入的话容易出错,网上搜了一下,有一种是在DBGrid中插入下拉组合框,另外一种是利用DBGrid的TColumn的PickList来实现

1.在DBGrid中插入下拉组合框:其实就是一个下拉组合框,改变它的位置,显示/隐藏,来达到目的

主要代码如下:

procedure TForm1.DBGrid1DrawDataCell(Sender:TObject;const Rect:TRect;Field:TField;State:TGridDrawState);

begin

  if (gdFocused in State) then

    if (Field.FieldName=DBComboBox1.DataField) then  //如果点击的字段是你想要的字段

    begin

  //调整DBComboBox1的位置,长度,宽度等,自己可以按需要调整

  DBComboBox1.left:=Rect.left+DBGrid1.left;

  DBComboBox1.Top:=Rect.Top+DBGrid1.top;

  DBComboBox1.width:=Rect.Right-Rect.left;

  DBComboBox1.Height:=Rect.Bottom-Rect.Top;

  DBComboBox1.Visible:=True;  //设计阶段,DBComboBox1.Visible为False

end;

procedure TForm1.DBGrid1ColExit(Sender:TObject);

begin

  if DBGrid1.SelectedFiedl.FieldName=DBComboBox1.DataField then

  begin

    DBComboBox1.Visible:=False;  //当选的其他列时,隐藏起来

  end;

end;

procedure TForm1.DBGrid1KeyPress(Sender:TObject;var Key:Char);

begin

  if (key<>chr(9)) then

    if (DBGrid1.SelectedField.FieldName=DBComboBox1.DataField) then

    begin

      DBComboBoxq.SetFocus;

      SendMessage(DBComboBox1.Handle,WM_CHAR,word(key),0);

    end;

end;

注意:DBComboBox1获取值,可以从数据库某表获取后,遍历赋值给它,当然普遍的TComboBox下拉组合框也行

2.利用TColumn的PickList属性来实现:PickList其实是TStrings类型,一般是在需要的时候动态赋值一个TStrings类型的值给它

  比如我们在点击DBGrid1中某个字段时

procedure TForm1.DBGrid1DrawColumnCell(Sender:TObject;const Rect:....);

var

  Astrings:TStringList;

begin

  Astrings:=TStringList.create;

  try

    //此处给Astrings添加需要的数据,比如根据你所选行的产品,去数据库找到该产品有多少种规格,然后全部添加进Astrings中

    Astrings.Add('a');  //此处只是测试

    Astrings.Add('b');

    Column.PickList:=Astrings;

  finally

    Astrings.Free;  //记得释放该变量,不然会内存泄漏

  end;

end;

当然上面的做法会令所有的Column都会生效,这时我们就应该使用if条件去判断一下,

比如 if Column.FieldName='Size' then  

此Column是否是我们需要的列,然后再去赋值给PickList.

第二种方法才是面向对象编程正确的做法,我们需要去了解对象的属性,然后利用它们达到我们的需求。

    

  

 

标签:begin,end,组合,DBComboBox1,DBGrid1,使用,DGgrid,Astrings,Rect
From: https://www.cnblogs.com/AP0606436/p/17536343.html

相关文章

  • 使用STM32的usb虚拟串口CDC_Transmit_FS打印freertos的任务列表vTaskList
    创建一个任务,打印信息后,把自己删除/*USERCODEENDHeader_func_showSysInfo*/voidfunc_showSysInfo(voidconst*argument){/*USERCODEBEGINfunc_showSysInfo*//*Infiniteloop*/for(;;){osDelay(1000);chartaskList[200];......
  • 在 Spring Boot 中使用 Dataway 配置数据查询接口
     Dataway介绍Dataway是基于DataQL服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过Dataway提供的UI界面完成。UI会以Jar包方式提供并集成到应用中并和应用共享同......
  • 使用Java实现基于OAuth 2.0的单点登录功能
    本文将介绍如何使用Java编写一个基于OAuth2.0的单点登录系统,通过OAuth2.0实现用户在多个应用程序间的无缝登录体验1.什么是OAuth2.0?OAuth2.0是一种开放的授权框架,用于在应用程序之间安全地共享用户的身份验证和授权信息。它允许用户授权第三方应用程序代表其访问受保护的资......
  • Qt使用过程中的一些问题
    1.qt.gui.imageio:libpngwarning:iCCP:knownincorrectsRGBprofile在Qt开发过程中使用了一些png图片导致报了这个信息,是因为这些png图片中嵌入了icc颜色管理模块导致。解决方法:下载JQTools工具,然后点击“Qt相关”->“PNG告警消除”,选择图片进行转换便可以消除告警。......
  • Java 抽象类的定义与使用
    抽象类抽象类举例: abstractPeople{publicabstractvoideat();publicabstractvoidsleep();}   抽象类的几个特点1.抽象类被修饰符abstract修饰 abstract类名{类体} 2.抽象类内可以存在抽象方法与非抽象方......
  • ,软件运行监听地址 ,扫码登录,爬虫介绍,requests模块介绍和快速使用,get请求携带参数,编码
    补充#软件运行,监听地址127.0.0.1 只能访问127.0.0.1localhost不能用本机ip地址访问,外部所有人都不能访问你0.0.0.0 127.0.0.1localhost本机ip地址访问同一个局域网内,都可以通过ip地址访问#本地host解析 输入网址---》www.baidu.com---->找本地host文......
  • http 和 https区别,自动携带cookie的session对象,响应response,下载图片视频到本地,编码
    1.1自动携带cookie的session对象#session对象----》已经模拟登录上了一些网站---》单独把cookie取出来 -res.cookies-转成字典res.cookies.get_dict()#请求头和数据importrequestsheader={'Referer':'http://www.aa7a.cn/user.php?&ref=http%3A%2F%2......
  • 使用 Spring Boot 和 Dubbo 进行集成
    1.创建一个SpringBoot项目,可以使用SpringInitializr(https://start.spring.io/)生成一个初始的项目结构。2.在pom.xml中添加Dubbo和相关依赖:<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId>......
  • git使用
    迁移如果是内网有需要情况下先配置host克隆仓库gitclone-bare仓库地址配置git账号gitconfig--globaluser.name""gitconfig--globaluser.email""删除原公钥 rm-rf~/.ssh重新生成公钥ssh-keygen-trsa-C""-b4096查看公钥cat~/.ssh/id_rsa.pub ......
  • 使用zTree如何实现悬停事件
    zTree是功能强大的树插件,但本身没有提供鼠标悬停事件,不过我们可以通过jquery实现,同时我们可以自定义一个延迟操作,避免不小心滑过的情况下触发不必要的操作vartimer;//声明一个全局量用于存储延迟操作的定时器$("#tree").on("mouseover",".node_name",function(){var......