(31)uniGUI for C++ builder下UniDBGrid记录多选与复制

                                                                                    (中行雷威2019.2.6)

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ群。)

【阅读倡议】

1、有问题请留言;

2、没问题请点赞;

3、看连载请加群;

4、下源码请加群;

【开发工具】

1、C++Builder10.2.3 tokyo

2、FMSoft_uniGUI_Complete_Professional_1.70.0.1485(正版)

3、本案例资源下载https://download.csdn.net/download/dlboy2018/10949772

4、也可访问我的QQ文件共享:A02-源代码  下载

本人主笔的国内第一本uniGUI教学案例代码已诞生,分为cbuilder和delphi两个版本,买代码送手册,需要的朋友可以加入我的QQ技术交流群484979943、860634510、299497712给我(群主)留言。资料简介:https://blog.csdn.net/dlboy2018/article/details/88923832
 
一、设计目标

UniDBGrid表格控件可以在最前面出现“√”,用来选择记录,本表格还支持多选,本文将演示如何实现记录多选和在两个表格之间互相挪动表格记录。官方demo在C:\Program Files (x86)\FMSoft\Framework\uniGUI\Demos\Desktop\GridMultiSelect(delphi版),官方demo用ClientDataSet作为数据源,本例子用uniDAC控件组访问oracle作为数据源。主要界面如下图:

二、功能设计

1、创建项目

d:\gridMultiSelect,创建项目standalone  exe模式,包含include和lib到“C:\Program Files (x86)\FMSoft\Framework\uniGUI\win32”。本例子使用oracle做为数据源,通过uniDAC控件组实现数据库访问,还要包含C:\Program Files (x86)\Devart\UniDAC for RAD Studio 10.2\Include\Win32头文件和C:\Program Files (x86)\Devart\UniDAC for RAD Studio 10.2\Lib\Win32库文件。关闭项目,再次打开。

2、数据库链接

在MainModule窗口下放置数据库链接控件UniConnection和OracleUniProvider控件,将UniConnection控件的ProviderName设为Oracle,LoginPrompt设为false。

void __fastcall TUniMainModule::UniGUIMainModuleBrowserClose(TObject *Sender)
{

//浏览器关闭时断开连接
UniConnection1->Close();
}
//---------------------------------------------------------------------------

void __fastcall TUniMainModule::UniGUIMainModuleCreate(TObject *Sender)
{
//链接数据库
String dbIp="127.0.0.1",dbUser="webframe",dbPass="webframe2018",dbPort="1521",dbSid="ORCL";
UniConnection1->Disconnect();
UniConnection1->ProviderName="Oracle";
UniConnection1->SpecificOptions->Add("direct=true");
//UniConnection1->SpecificOptions->Add("Charset=ZHS16GBK");
UniConnection1->Username=dbUser;
UniConnection1->Password=dbPass;
UniConnection1->Server=dbIp+":"+dbPort+":"+dbSid;
//ShowMessageN(UniConnection1->Server);
try
    {
    UniConnection1->Connect();
    }
catch(...)
    {
    Uniguidialogs::ShowMessage("连接数据库["+dbIp+"]失败!");
    //FormMain->Close();
    }

}
//---------------------------------------------------------------------------
数据源为atable1和atable2两个结构一样的表格。

DROP TABLE WEBFRAME.ATABLE1 CASCADE CONSTRAINTS;

CREATE TABLE WEBFRAME.ATABLE1
(
  USER_NAME  NVARCHAR2(10),
  USER_AGE   NVARCHAR2(10),
  USER_SEX   NVARCHAR2(10)
)
TABLESPACE USERS
RESULT_CACHE (MODE DEFAULT)
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
            FLASH_CACHE      DEFAULT
            CELL_FLASH_CACHE DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;
 

 

DROP TABLE WEBFRAME.ATABLE2 CASCADE CONSTRAINTS;

CREATE TABLE WEBFRAME.ATABLE2
(
  USER_NAME  NVARCHAR2(10),
  USER_AGE   NVARCHAR2(10),
  USER_SEX   NVARCHAR2(10)
)
TABLESPACE USERS
RESULT_CACHE (MODE DEFAULT)
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
            FLASH_CACHE      DEFAULT
            CELL_FLASH_CACHE DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;
 

 

3、主窗口

主窗口MainForm要包含UniMainModule窗口#include "MainModule.h"

在主窗口MainForm上放置两个UniDBGrid表格,两个UniDataSource,两个UniQuery,三个UniBitBtn控件。

1)UniDBGrid1属性设置:

DataSource=UniDataSource1

Options-》dgRowSelect=true (选择行)

Options-》dgCheckSelect=true(勾选)

Options-》dgMultiSelect=true(多选)

ReadOnly=true(只读)

WebOptions-》PageSize=25(页记录数)

2)UniDataSource1的属性设置:

DataSet=UniQuery1

3)UniQuery1的属性设置:

Connection=UniMainModule.UniConnection1

4)UniDBGrid2属性设置:

DataSource=UniDataSource2

Options-》dgRowSelect=true (选择行)

Options-》dgCheckSelect=true(勾选)

Options-》dgMultiSelect=true(多选)

ReadOnly=true(只读)

WebOptions-》PageSize=25(页记录数)

5)UniDataSource2的属性设置:

DataSet=UniQuery2

6)UniQuery2的属性设置:

Connection=UniMainModule.UniConnection1

 

4、主要代码

//---------------------------------------------------------------------------
#include <vcl.h>
#include <uniGUIVars.hpp>
#pragma hdrstop

#include "Main.h"
#include "MainModule.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "uniBasicGrid"
#pragma link "uniBitBtn"
#pragma link "uniButton"
#pragma link "uniDBGrid"
#pragma link "uniGUIBaseClasses"
#pragma link "uniGUIClasses"
#pragma link "DBAccess"
#pragma link "MemDS"
#pragma link "Uni"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TMainForm *MainForm(void)
{
   return( (TMainForm *)UniMainModule()->GetFormInstance(__classid(TMainForm)));
}
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TUniForm(Owner)
{
}
//---------------------------------------------------------------------------
void T71AFFD34A4414BB2B5EA38264ABFC349__RegisterFormClass() {
  Uniguivars::RegisterAppFormClass(__classid(TMainForm));
  Uniguiregclasses::CPPInit();
}

#pragma startup T71AFFD34A4414BB2B5EA38264ABFC349__RegisterFormClass
void __fastcall TMainForm::UniFormBeforeShow(TObject *Sender)
{
//查询表一
UniQuery1->Close();
UniQuery1->SQL->Clear();
UniQuery1->SQL->Add("select * from atable1");
UniQuery1->Open();
//查询表二
UniQuery2->Close();
UniQuery2->SQL->Clear();
UniQuery2->SQL->Add("select * from atable2");
UniQuery2->Open();

}
//---------------------------------------------------------------------------

void __fastcall TMainForm::UniBitBtn1Click(TObject *Sender)
{
//从左侧向右侧挪
for(int i=0;i<UniDBGrid1->SelectedRows->Count;i++)
    {
    UniQuery1->Bookmark =    UniDBGrid1->SelectedRows->Items[i];
    UniQuery2->Append();
    UniQuery2->CopyFields(UniQuery1);
    UniQuery2->Post();
    }
UniDBGrid1->SelectedRows->Delete();

UniQuery1->Refresh();
UniQuery2->Refresh();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::UniBitBtn2Click(TObject *Sender)
{
//从右侧向左侧挪
for(int i=0;i<UniDBGrid2->SelectedRows->Count;i++)
    {
    UniQuery2->Bookmark =    UniDBGrid2->SelectedRows->Items[i];
    UniQuery1->Append();
    UniQuery1->CopyFields(UniQuery2);
    UniQuery1->Post();
    }
UniDBGrid2->SelectedRows->Delete();

UniQuery1->Refresh();
UniQuery2->Refresh();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::UniBitBtn3Click(TObject *Sender)
{

//取表格的某个字段
String tmpStr="";
//方法一
//for(int i=1;i<UniQuery2->RecordCount+1;i++)
//    {
//    UniQuery2->RecNo=i;
//
//    tmpStr+=UniQuery2->FieldByName("user_name")->AsString;
//    }
//ShowMessage(tmpStr);

//方法二
for(int i=1;i<UniDBGrid2->DataSource->DataSet->RecordCount+1;i++)
    {
    UniDBGrid2->DataSource->DataSet->RecNo=i;
    tmpStr+=UniDBGrid2->DataSource->DataSet->FieldByName("user_name")->AsString;
    }
ShowMessage(tmpStr);
}
//---------------------------------------------------------------------------
 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值