用adoquery连接MSSQL的northwind数据库,
使用select '0 ' as checked, shipname from orders
查询结果数据显示在DBGridEh1中。
双击DBGridEh1加入所有数据列,然后编辑checked列的checkboxes属性为true。
想让可以打对号的checked列,可以编辑。如何实现?
(虚拟的数据源字段select '0 ' as checked,如何可以实现编辑?adoquery开缓存模式) 目前只知道在Query中可以实现。adoquery没找到实现方法,有知道的高手还请指点!
使用select '0 ' as checked, shipname from orders
查询结果数据显示在DBGridEh1中。
双击DBGridEh1加入所有数据列,然后编辑checked列的checkboxes属性为true。
想让可以打对号的checked列,可以编辑。如何实现?
(虚拟的数据源字段select '0 ' as checked,如何可以实现编辑?adoquery开缓存模式) 目前只知道在Query中可以实现。adoquery没找到实现方法,有知道的高手还请指点!
如果在SQL语句中增加那么一列,就是类似常数的一列,是不能修改的。
如果想增加一列计算列,可以在ADOQuery中增加。
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Buttons, Grids, DBGrids;type
TForm2 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
BitBtn1: TBitBtn;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery1selected: TBooleanField;
ADOQuery1Number: TStringField;
ADOQuery1gh: TStringField;
ADOQuery1bumen_bh: TStringField;
ADOQuery1name: TStringField;
ADOQuery1sex: TStringField;
ADOQuery1BirthDate: TDateTimeField;
ADOQuery1NativePlace: TStringField;
ADOQuery1Folk: TStringField;
ADOQuery1Position: TStringField;
ADOQuery1Diploma: TStringField;
ADOQuery1IdentityCard: TStringField;
ADOQuery1FamilyAddress: TStringField;
ADOQuery1IdentityCardAddress: TStringField;
ADOQuery1InDutyDate: TDateTimeField;
ADOQuery1InDueFormDate: TDateTimeField;
ADOQuery1PactEndDate: TDateTimeField;
ADOQuery1SocialSecurityNumber: TStringField;
ADOQuery1MedicalTreatment: TStringField;
ADOQuery1Introducer: TStringField;
ADOQuery1CurState: TStringField;
ADOQuery1Photo: TStringField;
ADOQuery1CardNo: TStringField;
ADOQuery1password: TStringField;
ADOQuery1Status: TStringField;
ADOQuery1Basic_Wage: TBCDField;
ADOQuery1DutyWage: TBCDField;
ADOQuery1Age_Wage: TBCDField;
ADOQuery1Housing_Fill: TBCDField;
ADOQuery1Secrecy_Toll: TBCDField;
ADOQuery1Phone_Toll: TBCDField;
ADOQuery1Meal_Fill: TBCDField;
ADOQuery1Overtime_Fill: TBCDField;
ADOQuery1Achievement_Assess: TBCDField;
ADOQuery1person_No1: TStringField;
ADOQuery1Person_Name1: TStringField;
ADOQuery1Dept_Name1: TStringField;
ADOQuery1Date1: TDateTimeField;
ADOQuery1Person_No2: TStringField;
ADOQuery1Person_Name2: TStringField;
ADOQuery1Dept_Name2: TStringField;
ADOQuery1Date2: TDateTimeField;
ADOQuery1Person_No3: TStringField;
ADOQuery1Person_Name3: TStringField;
ADOQuery1Dept_Name3: TStringField;
ADOQuery1Date3: TDateTimeField;
ADOQuery1Enable: TStringField;
ADOQuery1Memo: TStringField;
ADOQuery1Person_Number: TStringField;
ADOQuery1OutDutyDate: TDateTimeField;
ADOQuery1Is_KaoQin: TBooleanField;
ADOQuery1Insurance: TBCDField;
ADOQuery1password2: TStringField;
ADOQuery1TryOut_Salary: TBCDField;
ADOQuery1Formal_Salary: TBCDField;
ADOQuery1DSDesigner: TBCDField;
ADOQuery1DSDesigner2: TBCDField;
ADOQuery1DSDesigner3: TBCDField;
ADOQuery1DSDesigner4: TBCDField;
ADOQuery1DSDesigner5: TBCDField;
ADOQuery1DSDesigner6: TBCDField;
ADOQuery1DSDesigner7: TBCDField;
ADOQuery1DSDesigner8: TBCDField;
ADOQuery1DSDesigner9: TBCDField;
ADOQuery1Is_Two_Salary: TBooleanField;
ADOQuery1DSDesigner10: TBCDField;
ADOQuery1DSDesigner11: TBCDField;
ADOQuery1DSDesigner12: TBCDField;
ADOQuery1is_month_salary: TBooleanField;
ADOQuery1level: TStringField;
ADOQuery1is_jijian: TBooleanField;
ADOQuery1ExecDate: TStringField;
ADOQuery1New_Level: TStringField;
ADOQuery1school: TStringField;
ADOQuery1specialty: TStringField;
ADOQuery1temp_level: TStringField;
ADOQuery1temp_execdate: TStringField;
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure DBGrid1ColEnter(Sender: TObject);
procedure DBGrid1ColExit(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
OriginalOptions : TDBGridOptions;
List:TStringList;
procedure SaveBoolean; public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
CtrlState:array[Boolean]of Integer=(DFCS_BUTTONCHECK,DFCS_BUTTONCHECK or DFCS_CHECKED);begin
If column.Field.DataType =ftBoolean Then
Begin
Dbgrid1.Canvas.FillRect(rect);
DrawframeControl(dbgrid1.Canvas.Handle,rect,DFC_BUTTON,CtrlState[Column.Field.asBoolean]);
End;end;procedure TForm2.DBGrid1ColEnter(Sender: TObject);
begin
If Dbgrid1.SelectedField.DataType =ftBoolean Then
Begin
OriginalOptions :=DBgrid1.Options;
Dbgrid1.Options :=Dbgrid1.Options -[dgEditing];
End;end;procedure TForm2.DBGrid1ColExit(Sender: TObject);
begin
If Dbgrid1.SelectedField.DataType =ftBoolean Then
Begin
Dbgrid1.Options :=OriginalOptions;
End;end;procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
If (Dbgrid1.SelectedField.DataType =ftBoolean) And (Column.ID =1) Then
SaveBoolean();
end;procedure TForm2.SaveBoolean;
Begin
Dbgrid1.SelectedField.DataSet.Edit ;
Dbgrid1.SelectedField.AsBoolean :=Not Dbgrid1.SelectedField.AsBoolean; If Dbgrid1.SelectedField.AsBoolean =True Then
List.Add(Adoquery1gh.AsString)
Else
Begin
If List.IndexOf(Adoquery1gh.AsString )>=0 Then
List.Delete(list.IndexOf(Adoquery1gh.AsString) );
End;
Dbgrid1.SelectedField.DataSet.Post ;End;procedure TForm2.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If (Key=VK_SPACE) And (Dbgrid1.SelectedField.DataType =ftBoolean ) Then
SaveBoolean();end;procedure TForm2.FormShow(Sender: TObject);
Var
strSql:string;
begin
strSql:='IF Object_id(''tempdb..#'' ) IS NOT NULL DROP TABLE # ' +
'SELECT CAST(null as bit) selected,* INTO # FROM employee '+
'SELECT * FROM #';
Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.Add(strSql);
Adoquery1.Open;
List:=TStringList.Create ;end;procedure TForm2.BitBtn1Click(Sender: TObject);
Var
strSql:String;
gh:String;
intI:Integer;
begin
gh:='';
For intI:=List.Count -1 Downto 0 Do
gh:=gh+list[intI]+',';
strSql:='SELECT * FROM employee WHERE charindex(gh,'''+gh+''')>0 ';end;end.