在这种形式中,我使用的是Table1
(三列“ZEMLJA”、“KATEGORIJA”和“NAZIV”)并DataSource1
连接到 paradox 7 数据库。也DBGrid1
连接到DataSource1
. 这里还有三个编辑框(Edit1
和Edit2
)Edit3
。
在头文件中我放:
public: // User declarations
__fastcall TForm4(TComponent* Owner);
void Filtriraj(AnsiString szZemljaAsterix, AnsiString szKategorijaAsterix, AnsiString szNazivAsterix, AnsiString szNoviAsterix);
我的 cpp 文件如下所示:
#include <vcl.h>
#pragma hdrstop
#include “Unit4.h”
//—————————————————————————
#pragma package(smart_init)
#pragma resource “*.dfm”
TForm4 *Form4;
//—————————————————————————
__fastcall TForm4::TForm4(TComponent* Owner): TForm(Owner)
{
}
//—————————————————————————
void TForm4::Filtriraj(AnsiString szZemljaAsterix, AnsiString szKategorijaAsterix, AnsiString szNazivAsterix, AnsiString szNoviAsterix)
{
AnsiString szUslov=””;
if( !Edit3->Text.IsEmpty() )
{
szUslov = “ZEMLJA = ‘” + Edit3->Text + szZemljaAsterix + “‘”;
}
if( (!Edit4->Text.IsEmpty()) && (!Edit3->Text.IsEmpty()) )
{
szUslov = szUslov + “and KATEGORIJA = ‘” + Edit4->Text + szKategorijaAsterix + “‘”;
}
else if( (!Edit4->Text.IsEmpty()) && (Edit3->Text.IsEmpty()) )
{
szUslov = “KATEGORIJA = ‘” + Edit4->Text + szKategorijaAsterix +”‘”;
}
if( !Edit5->Text.IsEmpty() )
{
if(szUslov!=””)
szUslov = szUslov + “and NAZIV = ‘” + Edit5->Text + szNazivAsterix + “‘”;
else
szUslov = szUslov + “NAZIV = ‘” + Edit5->Text + szNazivAsterix + “‘”;
}
Table3->Filter = szUslov;
Table3->Filtered = true;
}
//—————————————————————————
void __fastcall TForm4::Edit3Change(TObject *Sender)
{
Filtriraj(“*”,””,””,””);
}
//—————————————————————————
void __fastcall TForm4::Edit4Change(TObject *Sender)
{
Filtriraj(“”,”*”,””,””);
}
//—————————————————————————
void __fastcall TForm4::Edit5Change(TObject *Sender)
{
Filtriraj(“”,””,”*”,””);
}
//—————————————————————————
void __fastcall TForm4::Edit3KeyPress(TObject *Sender, char &Key)
{
if( Key==13 )
{
Edit4->SetFocus();
if(Edit3->Text==””)
Edit3->Text =””;
else
Edit3->Text = Edit3->Text + “*”;
Filtriraj(“”,””,””,””);
}
}
//—————————————————————————
void __fastcall TForm4::Edit4KeyPress(TObject *Sender, char &Key)
{
if( Key==13 )
{
Edit5->SetFocus();
if(Edit4->Text==””)
Edit4->Text =””;
else
Edit4->Text = Edit4->Text + “*”;
Filtriraj(“”,””,””,””);
}
}
//—————————————————————————
void __fastcall TForm4::Edit5KeyPress(TObject *Sender, char &Key)
{
if( Key==13 )
{
DBGrid1->SetFocus();
if(Edit5->Text==””)
Edit5->Text =””;
else
Edit5->Text = Edit5->Text + “*”;
Filtriraj(“”,””,””,””);
}
}
//—————————————————————————
这段代码很好用,每个编辑框都可以正确过滤DBGrid
,如果我只想放一部分单词,希望它可以完美运行,但是这个过滤器从DBGrid
.
我想制作一个过滤器,它可以在单元格的任何地方找到单词。例如,我有很多行,这意味着很多单元格,在一个单元格中写着“我将在明天去学校”,当我在编辑框 SCHOOL 中输入时,它应该在我的单元格中找到我的单词 SCHOOL 并告诉我在某种程度上无关紧要(行选择器或过滤器我不在乎)。
如果有人知道解决此问题的更简单方法。