首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于下拉列表框的有关问题

2012-03-07 
关于下拉列表框的问题我初学delphi,以前一直开发java+jsp的程序,想问一下在delphi里如何实现数据字典模式

关于下拉列表框的问题
我初学delphi,以前一直开发java+jsp的程序,想问一下在delphi里如何实现数据字典模式的下拉列表框,就是类似web下<option value="xx">name</option>的效果,显示的是name的内容,但提交的时候传到后台的是value里面的内容,其中value和name都是到数据库表里取到的值。
或者有没有其他更好的实现方式式,我太习惯以前的开发模式了,谢谢。

[解决办法]

Delphi(Pascal) code
unit Unit1;interfaceuses  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 


begin 
id := PcomBoList(ComList[ComBox.itemIndex]).id; 
name := PcomBoList(ComList[ComBox.itemIndex]).name; 
end; 
TDBComBoBoxEH 
if DBComboBoxEH.itemIndex < > -1 then 
begin 
id := DBComboBoxEH.value; 
name := DBComboBoxEH.Text; 
end; 

热点排行