我仿照北京浮生记做的小程序已经差不多完工了.
  但是碰到了一个无法解决的问题.
      我在界面上做了两个listview    一个是商店的货物和价格(listview1)
+
      一个是玩家自己货的仓库.(物品名称,价格,数量)(listview2)
     我已经可以实现把listview1的商品和价格放入至listvew2
  
  但是我不知道如何去修改.
  比如,我买过了一个物品,买了2件,然后我又要再买5件.但我现在的方法只能在listview2里面再添加一行.而不是在原有的列内进行修改.  还有比如我出售listview2内的物品.数量也无法修改.还有.出售的时候.我需要按listview1里面的价格出售.我无法得到listview1内和listview2内同名的物品的价格.希望高手帮我解答.  不知道是不是listview无法满足此程序的需要.如果真的不能.还望大大们介绍一下其它的组件的方法.谢谢

解决方案 »

  1.   

    listview与treeview一样都有一个data的属性,可以利用这个.
    但直接在listview上修改好像不可以,应该新开一个窗体,改完后要刷新
      

  2.   

       我不是说在上面直接修改.而是在我点买入.或者点买出后.会跳出一个窗体.在上面输入要买入的数量和卖出的数量.然后
    下面的listview2做出相应的减少或增加
      

  3.   


    答案就是2楼的。
    如果要满足你所说的话,你就要在关闭跳出的窗体前就对ListView2做相应的操作了。
      

  4.   

    我做的界面是这样.但是我不知道怎么实现listveiw的修改.比如我的仓库里面是10件.我现在卖出4件.我的仓库现在应该修改为6件,后来我又买进2件. 我的仓库修改8件.
    我想listveiw里面有相应的修改.
      

  5.   


    var
      PcsLeft, PcsBuy: Integer;
      item:TListItem;
    begin
      with Form1 do begin
        PcsLeft := StrToInt(ListView1.Selected.SubItems.Strings[1]) - PcsBuy; //假设件数是在第三列
        ListView1.Selected.SubItems.Strings[1]:= IntToStr(PcsLeft); //更新剩余商品数    item := ListView2.FindCaption(0,ListView1.Selected.Caption,false,true,false);
        if item<>nil then begin   //如果已经有该商品
          PcsLeft := StrToInt(ListView2.Selected.SubItems.Strings[1]) + PcsBuy  ;
          ListView2.Selected.SubItems.Strings[1]:= IntToStr(PcsLeft);     //更新
        end
        else begin                //如果还没有该商品,直接copy过来再修改数据为买的
          item := ListView2.Items.AddItem(ListView1.Selected);
          item.SubItems.Strings[1] := IntToStr(PcsBuy);
        end;
      end;
    end;
      

  6.   

    JeffChung 我试了.你的方法,但是程序老是报错.而且有一点.listveiw1里面只有商品,和价格.是没有数量的.
    只有listview2是有数量的.  所有的修改是针对listview2.只有在出售listview2的商品时.需要用到listview1价格.
      

  7.   

      我把你的方法改了一下后.
    item := ListView2.FindCaption(0,ListView1.Selected.Caption,false,true,false);
        if item<>nil then begin   //如果已经有该商品
          PcsLeft := StrToInt(ListView2.Selected.SubItems.Strings[1]) + 5  ;
          ListView2.Selected.SubItems.Strings[1]:= IntToStr(pcsleft);     //更新
        end
        //else begin                //如果还没有该商品,直接copy过来再修改数据为买的
          //item := ListView2.Items.AddItem(ListView1.Selected);
         // item.SubItems.Strings[1] := IntToStr(5);
       // end;
      end;是可以实现.但是有个问题就是.我必须点到listview2后程序才正常.不然程序出错
      

  8.   

      item := ListView1.FindCaption(0,ListView2.Selected.Caption,false,true,false);if listview1.selected<>nil then  begin
               SkinMessage1.MessageDlg('请选择一个商品!?',mtInformation, [mbOK], 0);
          end else if  item=nil then
              begin
              SkinMessage1.MessageDlg('这里没有该商品出售啊!?',mtInformation, [mbOK], 0);
              end else begin
                      itemsale.name:=listview2.Selected.Caption;
           itemsale.jiage:=strtoint(listview2.Selected.SubItems.Strings[0]);
           itemsale.num:=strtoint(listview2.Selected.SubItems.Strings[1]);
          itemsale.ShowModal;      end;   
    我这样写,在没点到listview2时会报错.为什么?是不是?
      

  9.   


      
      if ListView2.Selected = nil then
      begin
        SkinMessage1.MessageDlg('请选择一个商品!?',mtInformation, [mbOK], 0); 
        exit;
      end;    item := ListView1.FindCaption(0,ListView2.Selected.Caption,false,true,false);   if item=nil then 
      begin 
        SkinMessage1.MessageDlg('这里没有该商品出售啊!?',mtInformation, [mbOK], 0); 
      end else begin 
        itemsale.name:=listview2.Selected.Caption; 
        itemsale.jiage:=strtoint(listview2.Selected.SubItems.Strings[0]); 
        itemsale.num:=strtoint(listview2.Selected.SubItems.Strings[1]); 
        itemsale.ShowModal; 
      end;  
      

  10.   

    哦,告诉你的只是思路。比如我要买东西,我要先选中商店那里的某一项(selected),然后点买进(弹出买卖窗口,选择件数)
    确定之后,先看一下自身的仓库里是否已经有这种货物,如果有的话,直接把库存的数量更新一下
    没有的话,要添加这种货物的名称等。你想一下,要用的代码都已经写出来了,只看你的应用怎么写,你就改那些代码了
      

  11.   

    嗯.聆听大哥,你的代码我大致已经明白了.就是当我点击自身仓库的的商品,如何获得该商品在商店的价格.这是最后一步了.
    不好意思.再麻烦你一下. listview我是第一次用.真的有点迷糊.(本身技术菜也是一个原因^_^)
      

  12.   


       谢谢你的代码.程序已经不报错了,主要是item:=lise.... 这一行.我一直没解决掉.
      

  13.   

    可以放在数据库里,执行操作时,重新将数据加㿼到listview中