设置cxGridDBTableView3IsUse.Properties 为 ImageComboBox;
实现:当选择一个下拉框的时候,给同条记录的另一个字段赋值上值。
Q:给同条记录另一字段赋值是成功,但是当前下拉框的内容却改变不了!
我是写在change事件,请问在哪个事件写,如何写比较好?
谢谢。

解决方案 »

  1.   

    哦!
    搞错了,以为是ComboBox组件!写在ButtonClick比较好!
      

  2.   

    有两个方法去实现你的功能:第一种:
    在对应Column的 OnGetDisplayText事件中告诉你的Column要显示什么内容;procedure TForm.ATableViewColumn1GetDisplayText(
      Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
      var AText: String);
    begin
       AText := ' 你要显示的内容';
    end第二中方法,你不需要设置Column的 .Properties 为 ImageComboBox;
    直接 在你的CxGrid  的OnCustomCell 事件中来做:procedure TForm.ATableViewCustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    var
      m_Bitmap: TBitmap;
      m_Rect: TRect;
      m_FieldValue: string;
      m_ImageIndex: Integer;
    begin
      m_Rect := AViewInfo.Bounds;
      m_FieldValue := AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index];
      m_ImageIndex := 你要显示的对应ImageList 中的 ImageIndex;
      if (m_ImageIndex > -1) and (m_ImageIndex < FDataImageList.Count) then
      begin
        m_Bitmap := TBitmap.Create;
        try
          ACanvas.Canvas.Lock;
          //填充绘画区域,否则将会出现背景颜色出现在绘画区域的情况;
          ACanvas.FillRect(AViewInfo.Bounds);
          FDataImageList.GetBitmap(m_ImageIndex, m_Bitmap);
          m_Rect.Left := m_Rect.Left + m_Bitmap.Width + 5;
          m_Rect.Top := m_Rect.Top + 2;
          ACanvas.DrawTexT(m_FieldValue, m_Rect, cxAlignLeft);
          ACanvas.DrawGlyph(AViewInfo.Bounds.Left + 2, AViewInfo.Bounds.Top, m_Bitmap);
          ADone := True;
          Application.ProcessMessages;
        finally
          ACanvas.Canvas.UnLock;
          m_Bitmap.Free;
        end;
      end;
    end;第二种方法的效率要比第一种要高;