找出同样的用一个for 循环不就完事了,循环时记录相同的item的索引下标,然后把对于下标的设置下背景色
修改背景色可以把canvas的brush指定一个颜色,然后fillrect填充这个颜色,最后用textout把文字画上去

解决方案 »

  1.   

    回覆大大..我的想法是..建立一個虛擬欄位..然後上下筆資料比對..
    如果一樣的話...就在上下筆資料的虛擬欄位填入值...
    目前卡在不知如何進行上下筆資料比對...請大大指導...謝謝!!
    我在ADOQuery20CalcFields中寫了以下語法..但發生錯誤while not Adoquery20.Eof do
      begin
        s1:=adoquery20.fieldbyname('sField2').AsString;
        Adoquery20.Next;
        ss:=adoquery20.fieldbyname('sField2').AsString;
          if(ss=s1)  then
            begin
              DataSet.FieldByName('s4').AsString:='0';
            end;
      end;
      

  2.   

    差不多就是楼主写的那样。
    只是做以下修改:1.在AdoQuery.AfterPost事件里处理;
    2.先DisableControls,记住目前位置,处理完后回到目前位置(用Dataset.book),最后EnableControls;
    3.记住目前的值(你的代码里已有),Prior到头,再Next到尾。
    4.EnableControls会帮你Update Grids,从而上色。
      

  3.   

    回覆大大....我寫了以下語法..但是遇到一個問題
    就是最後一筆資料會讀取2次...變成最後一筆資料會誤判重覆
    找不出哪裡有問題..請大大指導...謝謝!!
     adoquery20.DisableControls;
        try
         Adoquery20.First;
              while not Adoquery20.Eof do
              begin
             s2:=adoquery20.fieldbyname('sField2').AsString;
             s3:=adoquery20.fieldbyname('re').AsString;
          Adoquery20.Next;
           s4:=adoquery20.fieldbyname('sField2').AsString;
           s5:=adoquery20.fieldbyname('re').AsString;
         if(s2=s4) then
          begin
            ListBox1.Items.Add(s3);
            ListBox1.Items.Add(s5);
          end;
             end;
              finally
          adoquery20.EnableControls;
           end;
      

  4.   


    adoquery20.DisableControls;
    try
      Adoquery20.First;
      if not ADOQuery20.Eof then
      begin
        s2:=adoquery20.fieldbyname('sField2').AsString;
        s3:=adoquery20.fieldbyname('re').AsString;
      end;
      ADOQuery20.Next;
      while not Adoquery20.Eof do
      begin
        s4:=adoquery20.fieldbyname('sField2').AsString;
        s5:=adoquery20.fieldbyname('re').AsString;
        if(s2=s4) then
        begin
           ListBox1.Items.Add(s3);
           ListBox1.Items.Add(s5);
        end;
        Adoquery20.Next;
      end;
    finally
      adoquery20.EnableControls;
    end;
      

  5.   

    这个事取完数据再回头把颜色处理一下不就完了么。非得要同时取数据又改颜色?多累呀。
    把数据先导出到Excel,再对比 FOR i:=1 to N-1 do IF (第i格=第i+1格) THEN 上色;IF 格(N-1)=格(N) THEN 上色 完事,外面加个N>1 的判断,懂的。
      

  6.   

    另外楼主可能没弄明白Eof是怎么回事,Eof是指指针底下没东西了,不能用类似
    WHILE NOT eof DO
    BEGIN
    (取数据)
     next
    (取数据)
    END;的形式,而只可能是
    WHILE NOT eof DO
    BEGIN
    (取数据)
     next
    END;
    这样才不报错的。
    再另,SQL语句(Oracle)或者存储过程应该都能实现直接取上下行数据的功能,不用在程序里搞。