在下拉列表列中执行选择操作后自动设置其他列的值(原创)
在 cxGrid 中 clPrdNo 列为一个 LookupComboBox 列,期望在该列中选择一个列表项之后,自动设置 cxGrid 中其他相关列。这涉及到两个问题:
1.如何取得 LookupComboBox 列中多个下拉列表列的值;
2.如何设置 cxGrid 中其他列的值
在 clPrdNo 列的 EditValueChanged 事件中写入:
procedure TfrmAddOrder.clPrdNoPropertiesEditValueChanged(Sender: TObject);
var
strName, strGuige: string;
fPrice: Extended;
Edit: TcxCustomEdit;
begin
Edit := Sender as TcxCustomEdit;
// 必须有下面这句,才能把选择后的值提交到 clPrdNo 列中
Edit.PostEditValue;
// 取得下拉列表中所选行中其他列的值,clPrdNo 的 ListColumns 为 ProductNo;Name;Price;Guige
with TcxLookupComboBox(cvAddOrder.Controller.EditingController.Edit).Properties.Grid.DataController do begin
strName := Values[FocusedRecordIndex, 1];
fPrice := Values[FocusedRecordIndex, 2];
// 下拉列表中 Guige 列有可能是空值
if VarIsNull(Values[FocusedRecordIndex, 3]) then
strGuige := ''
else
strGuige := Values[FocusedRecordIndex, 3];
// 设置其他列的值
cvAddOrder.DataController.SetEditValue(clCaption.Index, strName, evsText);
cvAddOrder.DataController.SetEditValue(clPrice.Index, fPrice, evsText);
cvAddOrder.DataController.SetEditValue(clGuige.Index, strGuige, evsText);
end;
// 将输入焦点切换到 clNumber 列
clNumber.Editing := True;
end;

浙公网安备 33010602011771号