社区
VCL组件使用和开发
帖子详情
如何根据条件改变C++Builder 的DBGrid的每行颜色以及在第一列增加一个多选框
deshun205
2006-08-30 09:21:08
问题1:如何根据条件改变C++Builder 的DBGrid的每行颜色.不要找Delphi的。因为DrawDataCell不同
问题2:如何在DBGrid第一列增加一个多选框,然后根据多选框的选择来选择数据进行打印,使用的是QReprot.
谢谢大家了!
...全文
1112
23
打赏
收藏
如何根据条件改变C++Builder 的DBGrid的每行颜色以及在第一列增加一个多选框
问题1:如何根据条件改变C++Builder 的DBGrid的每行颜色.不要找Delphi的。因为DrawDataCell不同 问题2:如何在DBGrid第一列增加一个多选框,然后根据多选框的选择来选择数据进行打印,使用的是QReprot. 谢谢大家了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
raulLW
2006-09-14
打赏
举报
回复
BlueDeepOcean(蓝色·深海) :
我重新提问了
http://community.csdn.net/Expert/topic/5021/5021739.xml?temp=.1894953
谢谢大家了!
谁知道?
raulLW
2006-09-14
打赏
举报
回复
这样是不好,我知道,下次一定注意。
刚碰上这样的问题,解决不了,就来这查查,结果有人问相同的问题,就......
BlueDeepOcean
2006-09-14
打赏
举报
回复
怎么都是借着别人的帖子问自己的问题?这样不好,做人要厚道哦。
楼上的判断Table的RecNo即可。
raulLW
2006-09-14
打赏
举报
回复
第一个问题怎么解决的呢?
问题1:如何根据条件改变C++Builder 的DBGrid的每行颜色.不要找Delphi的。因为DrawDataCell不同
BlueDeepOcean
2006-09-13
打赏
举报
回复
DBGrid->Options << dgRowSelect;
wuqiu217
2006-09-13
打赏
举报
回复
怎么选中一行呢?谢谢...
jaffy
2006-09-05
打赏
举报
回复
LS的说的对,第3方控件有的时候就是简单,快,不过兰色的精神更好.^_^
netliuming
2006-09-05
打赏
举报
回复
是的,如果没有第3方控件替换,按兰色的方法应该可行。
flowercity
2006-09-04
打赏
举报
回复
ehlib控件可以实现这个功能
deshun205
2006-08-31
打赏
举报
回复
To BlueDeepOcean(蓝色·深海) :如何把这个TCheckBox放在第一列呢?能不能给出具体的例子?
谢谢大家的参与!
BlueDeepOcean
2006-08-31
打赏
举报
回复
就是选择哪一行就打印哪一行,不选择的不打印。
嗯……算法比较简单,但是具体实现就比较麻烦了:
1、确定记录条数,这个应该可以得到的,利用Count属性;
2、根据Count,进行一个for循环,动态生成TCheckBox,需要注意的,这些TCheckBox的实例的
索引号一定要连续的,否则对后续操作有影响;
3、书写一个公共函数完成对选择的索引号的记录,比如:
int __fastcall TForm1::WhichCheckBoxChecked(TObject *Sender)
{
if (Sender->InheritsForm(__classid(TCheckBox)))
return ((TCheckBox*)Sender)->Components->Index; //好像这么写,记不清了
}
4、通过一个TStringList或者一个二维数组保存DBGrid中选择了CheckBox的记录。由于DBGrid
是二维表,因此需要用到一个循环;
5、打印。
deshun205
2006-08-31
打赏
举报
回复
To BlueDeepOcean :第一列的每一行均存在一个CheckBox .
deshun205
2006-08-31
打赏
举报
回复
不是ComboBox。CheckBox,就是把所有选中的记录进行打印。
netliuming
2006-08-31
打赏
举报
回复
LZ是要ComboBox的效果吧?
BlueDeepOcean
2006-08-31
打赏
举报
回复
第二个问题说的不是很清楚。在DBGrid的第一列生成CheckBox很简单,但是你所说的第一列增加一个多选框,
我的理解是放在Top-Left的位置,也就是单元格的(0,0)位置上是吗?
还是说第一列的每一行均存在一个CheckBox?
BlueDeepOcean
2006-08-31
打赏
举报
回复
在默认所有的表格行可见的情况下,给出你可以取出所选行的字段值的代码,这个代码我以ShowMessage显示的,你可以将他保存在TStringList中,之后利用两次循环的方式变为二维表:
.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TCheckBox *cb[MAX_PATH];
TStringList *sl; //用于保存为二维表
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
sl = new TStringList;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i = 0;i < ADOTable1->RecordCount;i ++)
{
cb[i] = new TCheckBox(this);
cb[i]->Parent = this;
cb[i]->Name = "cb" + AnsiString(i + 1);
cb[i]->Left = DBGrid1->Left + 2;
cb[i]->Top = DBGrid1->Top + 19 * (i + 1);
cb[i]->Width = 10;
cb[i]->Height = 18;
cb[i]->Caption = "";
cb[i]->Visible = true;
cb[i]->BringToFront();
cb[i]->OnClick = WhichRecordNOChecked;
}
}
//---------------------------------------------------------------------------
.h
private: // User declarations
void __fastcall TForm1::WhichRecordNOChecked(TObject *Sender)
{
if (Sender->InheritsFrom(__classid(TCheckBox)))
{
if (((TCheckBox*)Sender)->Checked)
{
/* for testing
((TCheckBox*)Sender)->Name.SubString(((TCheckBox*)Sender)->Name.Pos("b") + 1,MAX_PATH).ToInt()
*/
ADOTable1->First();
if ((((TCheckBox*)Sender)->Name.SubString(((TCheckBox*)Sender)->Name.Pos("b") + 1,MAX_PATH).ToInt()) != ADOTable1->RecNo)
{
for (int i = 1;i < (((TCheckBox*)Sender)->Name.SubString(((TCheckBox*)Sender)->Name.Pos("b") + 1,MAX_PATH).ToInt());i ++)
ADOTable1->Next();
}
/*
ShowMessage(ADOTable1->RecNo); //for testing
*/
for (int c = 0;c < DBGrid1->Columns->Count;c ++)
ShowMessage(DBGrid1->Fields[c]->AsString);
}
}
}
BlueDeepOcean
2006-08-31
打赏
举报
回复
当然会出问题了,我这是默认所有行均显示的情况。
deshun205
2006-08-31
打赏
举报
回复
我拖拉右边的拖拉条,不会出问题吗?因为cb[i]不会移动的
BlueDeepOcean
2006-08-31
打赏
举报
回复
啊,忘了一句,就是
cb[i]->OnClick = WhichCheckBoxChecked; //上面定义的那个函数。
BlueDeepOcean
2006-08-31
打赏
举报
回复
根据记录条数,动态生成TCheckBox类的实例。打印的时候,可以在点击“打印”后,触发这个事件。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TCheckBox *cb[MAX_PATH];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i = 0;i < ADOTable1->RecordCount;i ++)
{
cb[i] = new TCheckBox(this);
cb[i]->Parent = this;
cb[i]->Left = DBGrid1->Left + 2; //调整系数
cb[i]->Top = DBGrid1->Top + 18 * (i + 1); //调整系数
cb[i]->Width = 10; //调整系数
cb[i]->Height = 18; //调整系数
cb[i]->Caption = "";
cb[i]->Visible = true;
cb[i]->BringToFront();
}
}
//---------------------------------------------------------------------------
加载更多回复(3)
C++Builder 资料库 (转载)
C++Builder 资料库 2005-03-03 15:14 13115人阅读 评论(3) 收藏 举报 1.怎样在C++Builder中创建使用DLL 2.用C++Bulider在WIN.INI中保存信息 3.如何在C++Builder中检测硬件 4.
C++Builder
如何响应消息及自定义消息 5.利用C++ Builder开发动画DLL 6.用C++ Builder
(31)uniGUI for C++ builder下Uni
DB
Grid
记录多选与复制
(中行雷威2019.2.6) (同
一个
世界,同
一个
梦想,交流学习
C++Builder
XE10,传承
c++builder
的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广...
C++Builder 资料库
1.怎样在C++Builder中创建使用DLL 2.用C++Bulider在WIN.INI中保存信息 3.如何在C++Builder中检测硬件 4.
C++Builder
如何响应消息及自定义消息 5.利用C++ Builder开发动画DLL 6.用C++ Builder 3制作屏幕保护程序 7.TCP/IP头格式 8.UDP 9.判断windows的Desktop及其它目录 10用C++Builde
C++ Builder 杂项
1.怎样在C++Builder中创建使用DLL 2.用C++Bulider在WIN.INI中保存信息 3.如何在C++Builder中检测硬件 4.
C++Builder
如何响应消息及自定义消息 5.利用C++ Builder开发动画DLL 6.用C++ Builder 3制作屏幕保护程序 7.TCP/IP头格式 8.UDP 9.判断windows的Desktop及其它目录 10用C++Builde
如何用C++ Builder存取Excel数据
一.用OLE技术操纵Excel ---- OLE(对象链接与嵌入)是微软提出的标准,是应用程序间交换数据、相互操作的一种方式,MS OFFICE 提供了很强的 OLE 服务功能,VB、Delphi 及
C++Builder
等语言都可以以客户方式向Excel提交命令,以存取其数据,其中VB和Delphi最为简单,在语法上就采用类VBA的语句,本报九九年第48期的《在Delphi中操作Excel》
VCL组件使用和开发
604
社区成员
13,460
社区内容
发帖
与我相关
我的任务
VCL组件使用和开发
C++ Builder VCL组件使用和开发
复制链接
扫一扫
分享
社区描述
C++ Builder VCL组件使用和开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章