关于下拉列表框的有关问题
关于下拉列表框的问题
我初学delphi,以前一直开发java+jsp的程序,想问一下在delphi里如何实现数据字典模式的下拉列表框,就是类似web下<option value="xx">name</option>的效果,显示的是name的内容,但提交的时候传到后台的是value里面的内容,其中value和name都是到数据库表里取到的值。
或者有没有其他更好的实现方式式,我太习惯以前的开发模式了,谢谢。
------解决方案--------------------
我初学delphi,以前一直开发java+jsp的程序,想问一下在delphi里如何实现数据字典模式的下拉列表框,就是类似web下<option value="xx">name</option>的效果,显示的是name的内容,但提交的时候传到后台的是value里面的内容,其中value和name都是到数据库表里取到的值。
或者有没有其他更好的实现方式式,我太习惯以前的开发模式了,谢谢。
------解决方案--------------------
- Delphi(Pascal) code
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ComboBox1: TComboBox; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var s:String; begin s:='要取的值'; combobox1.Items.AddObject('要显示的内空',Tobject(s)); end; procedure TForm1.ComboBox1Change(Sender: TObject); begin label1.Caption:=string(ComboBox1.Items.Objects[ComboBox1.itemindex]); end; end.
------解决方案--------------------
在onGetText和OnSetText里面写事件
procedure TForm1.ADOQuery1Field111GetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text:=Name值;
end;
procedure TForm1.ADOQuery1Field111SetText(Sender: TField; const Text: string);
begin
Text:=Value值
end;
------解决方案--------------------
Tcombobox这个里面只能存显示的值,要么就用一个指针结构来存,保存的时候就找这个选中值对应的ID值
或者用EH控件
PcomBoList = ^TComBoList;
TComboList = record
id : integer;
name : string;
end;
ComList : TList;
装载数据
procedure TEHLibClass.InitCombox(Sender: TObject; sqlstr, keyName,
keyID: string);
var i : integer;
p : PcomBoList;
begin
if sqlstr < > ' ' then
begin
with FADOQ do
begin
Close;
Sql.Clear;
Sql.Add(sqlstr);
open;
First;
if RecordCount < > 0 then
begin
if UpperCase(TComponent(Sender).ClassName) = UpperCase( 'TComboBox ') then
begin
TComboBox(Sender).Items.Clear;
TComboBox(Sender).Items.BeginUpdate;
for i := 0 to RecordCount - 1 do
begin
new(p);
p.id := Fieldbyname(keyID).AsString;
p.name := Fieldbyname(keyName).AsString;
ComList.add(p);
if keyName < > ' ' then
TDBComboBox(Sender).Items.Add(Fieldbyname(keyName).AsString);
Next;
end;
TComboBox(Sender).Items.EndUpdate;
end else if UpperCase(TComponent(Sender).ClassName) = UpperCase( 'TDBComboBoxEH ') then
Begin
TDBComboBoxEH(Sender).Items.Clear;
TDBComboBoxEH(Sender).KeyItems.Clear;
TDBComboBoxEH(Sender).Items.BeginUpdate;
for i := 0 to RecordCount - 1 do
begin
if keyID < > ' ' then
TDBComboBoxEH(Sender).KeyItems.Add(Fieldbyname(keyID).AsString);
if keyName < > ' ' then
TDBComboBoxEH(Sender).Items.Add(Fieldbyname(keyName).AsString);
Next;
end;
TDBComboBoxEH(Sender).Items.EndUpdate;
End
end;
end;
end;
end;
取出ID和显示值TComBoBox
if ComboBox.itemIndex < > -1 then