DBGrid 操作

dbgird1.onkey事件
if key=#13 then
begin
if dbgrid1.selectedindex<table1.fieldcount-1 then
dbgrid1.selectedindex:=dbgrid1.selectedindex+1
else
begin
table1.next;
dbgrid1.selectedindex:=1;
end
end

直接在DBGrid中录入数据时,录入完一个字段后需要用TAB键转入下一个字段,而我们通常的输入习惯是输入完毕按回车键,下面这段代码可实现用回车键代替TAB键,例子代码如下:首先把Form1的KeyPreview属性设为True,编写窗体的KeyPress事件代码,
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
if not (ActiveControl is TDbgrid) Then
//不是DBGrid组件
Begin
key:=#0;
perform(WM_NEXTDLGCTL,0,0);
end else
if (ActiveControl is TDbgrid) Then
//是Dbgrid组件
begin
With TDbgrid(ActiveControl) Do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1
else Selectedindex:=0;
end;

if (key=#13)and not(DBGrid1.DataSource.DataSet.Eof) then
DBGrid1.DataSource.DataSet.Next;
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_RETURN:
begin
if (key=VK_RETURN) and (dbgrid1.selectedindex<ADOQuery1.fieldcount-1) then
dbgrid1.selectedindex:=dbgrid1.selectedindex+1
else
if dbgrid1.selectedindex=ADOQuery1.fieldcount-1 then
begin
ADOQuery1.append;
dbgrid1.selectedindex:=0;
end;
end;
end;
end;

procedure TfrmEhlib.dgeStoreKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if dgeStore.SelectedIndex < dgeStore.FieldCount - 1 then
dgeStore.SelectedIndex := dgeStore.SelectedIndex + 1
else
if dgeStore.Row < dgeStore.RowCount - 1 then
begin
dgeStore.Row := dgeStore.Row + 1;
dgeStore.SelectedIndex := 0;
end;
end;
end;

在KEYPRESS事件下写
IF KEY = #13 THEN
BEGIN
SELECTEDINDEX := SELECTEDINDEX + 1;
END;

procedure TForm1.ADOQuery1AfterInsert(DataSet: TDataSet);
begin
with DBGridEh1 do
begin
SelectedIndex := 0;
end;
end;

// 行选中

DBGridEh_Yingfu_SearchQK.SelectedRows.SetCurrentRowSelected(True);

//选中单元格

DBGridEh1.SelectedField := ADOQuery1.FieldByName(‘收银简称’);

with DbgridEh_Xiaoshth_mx.SelectedField do
if DATASET.Active then
else if (FieldName = ‘peij_dj’) then //焦点停留在单价上
begin
Action_Searchprice.Execute;
end

// 下拉框

with DbgridEh_Xiaoshth_mx, DataSource.DataSet do
begin
  SelectedField := FieldByName('cangk_dm');
  with dm_main.Query_Cangk do
  begin
    if active then close;
    open;
    first;
    Columns[SelectedIndex].KeyList.Clear;
    Columns[SelectedIndex].picklist.Clear;
    while not eof do
    begin
      Columns[SelectedIndex].KeyList.Add(fieldbyname('cangk_dm').AsString);
      Columns[SelectedIndex].PickList.Add(fieldbyname('cangk_mc').AsString);
      next;
    end;
  end;
  columns[SelectedIndex].autodropdown := true;
end;

with DbgridEh_Xiaoshth_mx, DataSource.DataSet do
begin
  SelectedField := FieldByName('peij_dw');
  Columns[SelectedIndex].PickList := ReturnItemString(ITDanw_lc);
  columns[SelectedIndex].autodropdown := true;
  SelectedField := FieldByName('peij_jk');
  with Columns[SelectedIndex].PickList do
  begin
    Clear;
    Add('国产');
    ADd('进口');
    add('');
  end;
  Columns[SelectedIndex].AutoDropDown := true;
end;

void __fastcall TForm1::dbgrd1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
if(qry1->RecNo%2==0)
{
Column->Color=clRed;
}
else
{
Column->Color=clBlue;
}
if(State.Contains(gdSelected))
Column->Color=clBlack;
}

此处的qry1是DBGrid控件dbgrd1的数据集,dbgrd1是DBGrid1控件,

qry1->SQL->Add(“SELECT FNumber AS FFieldName,FName AS FEnDispLabel FROM t_Item where FItemClassID=100010”);

二、得到当前DBGrid控件选中单元的各种属性值(当选中某个单元格的时候,qry1的标记会自动跳转到该条记录,也许执行了类似qry1->Next();的语句)

当前选中单元格行号: qry1->RecNo

当前选中单元格列号: dbgrd1->SelectedIndex

    当前选中单元格内容:dbgrd1->SelectedField->Text

    当前选中单元格内容列名:dbgrd1->SelectedField->DisplayLabel

选中单元格所在行的所有值:以我的为例:两个字段的值分别为qry1->FieldByName(“FFieldName”)->AsString和qry1->FieldByName(“FEnDispLabel”)->AsString;

猜你喜欢

转载自blog.csdn.net/weixin_42041819/article/details/84868883