- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 DBLookupCombobox 添加到 DBGrid 中的某些列。 About.com 上有一篇关于如何执行此操作的好文章 here 。问题是,对于具有多列的表,如果您从 DBLookupCombobox 中选择一列,然后尝试向左滚动,组合框也会向左移动,如所包含的图像所示。如何更改 About.com 代码以防止这种行为?网络搜索显示,另外两个人也提示同样的问题,但没有解决方案。请注意,我想使用 DBLookupCombobox 来显示名称但输入 id,因此使用简单的选择列表是行不通的。
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if DBGrid1.SelectedField.FieldName = DBLookupComboBox1.DataField then
DBLookupComboBox1.Visible := False
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
if (Column.Field.FieldName = DBLookupComboBox1.DataField) then
with DBLookupComboBox1 do
begin
Left := Rect.Left + DBGrid1.Left + 2;
Top := Rect.Top + DBGrid1.Top + 2;
Width := Rect.Right - Rect.Left;
Width := Rect.Right - Rect.Left;
Height := Rect.Bottom - Rect.Top;
Visible := True;
end;
end
end;
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (key = Chr(9)) then Exit;
if (DBGrid1.SelectedField.FieldName = DBLookupComboBox1.DataField) then
begin
DBLookupComboBox1.SetFocus;
SendMessage(DBLookupComboBox1.Handle, WM_Char, word(Key), 0);
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with DBLookupComboBox1 do
begin
DataSource := DataSource1; // -> AdoTable1 -> DBGrid1
ListSource := DataSource2;
DataField := 'resource_id'; // from AdoTable1 - displayed in the DBGrid
KeyField := 'id';
ListField := 'resource_name; id';
Visible := False;
end;
DataSource2.DataSet := AdoQuery1;
AdoQuery1.Connection := AdoConnection1;
AdoQuery1.SQL.Text := 'SELECT id,resource_name FROM resources';
AdoQuery1.Open;
end;
最佳答案
这是一个使用来自François的巧妙技巧的解决方案。 .
type
// Hack to redeclare your TDBGrid here without the the form designer going mad
TDBGrid = class(DBGrids.TDBGrid)
procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL;
end;
TForm1 = class(TForm)
[...]
procedure TDBGrid.WMHScroll(var Msg: TWMHScroll);
begin
if Form1.DBGrid1.SelectedField.FieldName = Form1.DBLookupComboBox1.DataField then begin
case Msg.ScrollCode of
SB_LEFT,SB_LINELEFT,SB_PAGELEFT: begin
Form1.DBGrid1.SelectedIndex := Form1.DBGrid1.SelectedIndex-1;
Form1.DBLookupComboBox1.Visible := False;
end;
SB_RIGHT,SB_LINERIGHT,SB_PAGERIGHT: begin
Form1.DBGrid1.SelectedIndex := Form1.DBGrid1.SelectedIndex+1;
Form1.DBLookupComboBox1.Visible := False;
end;
end;
end;
inherited; // to keep the expected behavior
end;
关于delphi - 将 DBLookupCombobox 添加到 Delphi DBGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32916374/
我试图实现的就像在普通 ComboBox 中一样将 ItemIndex 设置为 -1,以便清除所选项目。 DBLookupComboBox 没有 ItemIndex,并且 Text 属性是只读的。那么
如何使用鼠标滚轮在 DBLookupComboBox 中列出的项目之间移动?就像它在 ComboBox 中所做的那样. 我正在使用 c++builder xe6 最佳答案 我找到了 对于每一个受苦的人
我有一个连接到数据库查询的 DBLookupComboBox。那部分工作正常。当我运行该程序时,DBLookupComboBox 中填充了查询结果。我希望在程序首次运行 或 启动新项目操作。 (见下图
我想将 DBLookupCombobox 添加到 DBGrid 中的某些列。 About.com 上有一篇关于如何执行此操作的好文章 here 。问题是,对于具有多列的表,如果您从 DBLookupC
我是一名优秀的程序员,十分优秀!