在下拉列表列中执行选择操作后自动设置其他列的值(原创)

在 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;
posted @ 2024-08-20 09:35  汉学  阅读(58)  评论(0)    收藏  举报