cxGrid新增一列cxGrid1DBTableView1Column1,Properties设为LookupComboBox,KeyFieldName 设置为品名,ListFieldNames设置为品名,单价
问题1:如何边输入品名,边根据品名模糊查找,并根据选中的品名自动填单价。
问题2:如果同品名有两个单价,cxGrid1老是只能选中第一条单价,无法选择第二条单价。谢谢
 

解决方案 »

  1.   

    看这个官方demo \DevExpress VCL\ExpressQuantumGrid\Demos\Delphi\GridModeDemo\GridModeDemo
    procedure TGridModeDemoMainForm.tvDataControllerFilterGetValueList(
      Sender: TcxFilterCriteria; AItemIndex: Integer;
      AValueList: TcxDataFilterValueList);
    var
      AColumn: TcxGridDBColumn;
      ADataSet: TDataSet;
      AProperties: TcxLookupComboBoxProperties;
      AValue: Variant;
      AIsLookupColumn: Boolean;
    begin
      ADataSet := TcxGridDBTableView(Grid.FocusedView).DataController.DataSet;
      AColumn := TcxGridDBTableView(Grid.FocusedView).Columns[AItemIndex];
      AIsLookupColumn := AColumn.PropertiesClass = TcxLookupComboBoxProperties;
      with GridModeDemoDataDM do
        try
          Screen.Cursor := crHourGlass;
          qryHelper.SQL.Clear;
          qryHelper.SQL.Add(
            'Select DISTINCT ' + AColumn.DataBinding.FieldName + ' From ' +
            GetTableNameByDataSet(ADataSet));
          qryHelper.SQL.Add(
            GetSQLCondition(TcxGridDBTableView(Grid.FocusedView), False));
          qryHelper.Open;
          qryHelper.First;
          while not qryHelper.Eof do
          begin
            AValue := qryHelper.Fields[0].Value;
            if AIsLookupColumn then
            begin
              AProperties := TcxLookupComboBoxProperties(AColumn.GetProperties);
              ADataSet := AProperties.ListSource.DataSet;
              AValue := ADataSet.Lookup(
                AProperties.KeyFieldNames,AValue, AProperties.ListFieldNames);
            end;
            if VarIsNull(AValue) then Exit;
            AValueList.Add(fviValue, qryHelper.Fields[0].Value, AValue, False);
            qryHelper.Next;
          end;
          qryHelper.Close;
        finally
          Screen.Cursor := crDefault;
        end;
    end;
      

  2.   

    也在简单研究一下cxGrid...
      

  3.   

      一、控件的使用
       1、Form中增加ADOConnection(连接数据库)、ADOQuery(选择下拉显示的内容表)、DataSource三个控件。
       设置相应参数,就其数据库的表。
       2、Form加入cxLookupComboBox控件   二、设置cxLookupComboBox属性设置
      (1)“Properties”属性,点击“ListSource”,改成DataSource1。
      (2)“ListFieldNames”表示要显示的列的名,如果显示多列,列名中间用“;”分隔。此处,你可以设置“品名”、“单价”二个以上字段;
      (3)“KeyFieldNames” 表示要返回的结果列。
       3、设置显示的属性
       点“ListColumns”,出现下面的内容。   右边框里面的三行,对应“ListFieldNames”里面的列名。
      (1)“Caption”是下拉时显示的列标题文字。
      (2)“HeaderAlignment”表示列标题字对齐方式。
      (3)“Width”表示列宽。
       tx每个显示的列,都要逐个设置。
       都设定好后,运行,就是下面的效果了。   当然,你的代码应该显示:“品名”、“单价”。这里仅提供显示样式。