Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Using ListView

Posted on 2004-08-11
7
Medium Priority
?
15,747 Views
Last Modified: 2011-08-18
I have a ListView component with it´s ViwStyle = vsReport. In it I have 3 Coloumns. Example:
With some values on only two columns, like:

Description   |   Value   |   Total  
Keyboard           245
Mouse              130
CPU                   10      

I want to search the list view for a certain description and edit the column "Total".
For Example I need to search Mouse and put it´s total to 400.

Description   |   Value   |   Total  
Keyboard          245
Mouse             130           400
CPU                  10

Is there a way of doing this ? Or how can I solve it ? It can be with a diferent component.
0
Comment
Question by:fabyola
7 Comments
 
LVL 12

Expert Comment

by:esoftbg
ID: 11778276
Does it mean that you want to search for multiple rows with Description Mouse ? ( because 130 is not equal of 400 )
0
 
LVL 17

Expert Comment

by:mokule
ID: 11778326
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to ListView1.Items.Count - 1 do
    begin
    if ListView1.Items[i].Caption = 'Mouse' then
      begin
      if ListView1.Items[i].SubItems.Count = 1 then
        ListView1.Items[i].SubItems.Add('400')
      else if ListView1.Items[i].SubItems.Count > 1 then
        ListView1.Items[i].SubItems[1] := '700';
      end;
    end;
end;
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 11778940
unit Unit1_Q_21090603;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ListView: TListView;
    btnTotal: TButton;
    ComboBox: TComboBox;
    Memo: TMemo;
    btnClearMemo: TButton;
    procedure btnTotalClick(Sender: TObject);
    procedure btnClearMemoClick(Sender: TObject);
  private   { Private declarations }
  public    { Public declarations }
    function  Get_Total(Descr: string): Boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function  TForm1.Get_Total(Descr: string): Boolean;
var
  Ok:     Boolean;
  I:      Integer;
  J:      Integer;
  K:      Integer;
  L:      Integer;
  M:      Integer;
  N:      Integer;
  S:      string;
begin
  Ok := True;
  try
    try
      J := 0;
      K := -1;
      N := 0;
      for I := 0 to ListView.Items.Count-1 do
      begin
        if (ListView.Items[I].Caption = Descr) then
        begin
          Inc(J);
          if (J=1) then
            K := I;
          S := ListView.Items[I].SubItems[0];
          Val(S, M, L);
          if (L=0) then
            N := N + M;
        end;
      end;
      S := IntToStr(N);
      if (K>=0) then
        ListView.Items[K].SubItems.Add(S);
    except
      Ok := False;
    end;
  finally
    Result := Ok;
  end;
end;

procedure TForm1.btnTotalClick(Sender: TObject);
var
  S:      string;
begin
  if Get_Total(ComboBox.Text) then
    S := 'Total about ' + ComboBox.Text + ' is OK.'
  else
    S := 'Total about ' + ComboBox.Text + ' failed';
  Memo.Lines.Add(S);
end;

procedure TForm1.btnClearMemoClick(Sender: TObject);
begin
  Memo.Clear;
end;

end.

//........

object Form1: TForm1
  Left = 224
  Top = 128
  BorderIcons = [biSystemMenu, biMinimize]
  BorderStyle = bsSingle
  Caption = 'Get Total'
  ClientHeight = 446
  ClientWidth = 504
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  PixelsPerInch = 96
  TextHeight = 13
  object ListView: TListView
    Left = 16
    Top = 32
    Width = 304
    Height = 400
    Columns = <
      item
        Caption = 'Description'
        Width = 128
      end
      item
        Caption = 'Value'
        Width = 64
      end
      item
        Caption = 'Total'
        Width = 80
      end>
    GridLines = True
    Items.Data = {
      C50000000600000000000000FFFFFFFFFFFFFFFF0100000000000000084B6579
      626F6172640332343500000000FFFFFFFFFFFFFFFF0100000000000000054D6F
      7573650331333000000000FFFFFFFFFFFFFFFF01000000000000000343505502
      313000000000FFFFFFFFFFFFFFFF0100000000000000054D6F75736503313435
      00000000FFFFFFFFFFFFFFFF0100000000000000054D6F757365033132350000
      0000FFFFFFFFFFFFFFFF010000000000000003435055023338FFFFFFFFFFFFFF
      FFFFFFFFFF}
    TabOrder = 0
    ViewStyle = vsReport
  end
  object btnTotal: TButton
    Left = 208
    Top = 4
    Width = 80
    Height = 25
    Caption = 'Total'
    TabOrder = 1
    OnClick = btnTotalClick
  end
  object ComboBox: TComboBox
    Left = 16
    Top = 6
    Width = 152
    Height = 21
    Style = csDropDownList
    ItemHeight = 13
    ItemIndex = 0
    TabOrder = 2
    Text = 'Keyboard'
    Items.Strings = (
      'Keyboard'
      'Mouse'
      'CPU')
  end
  object Memo: TMemo
    Left = 320
    Top = 32
    Width = 160
    Height = 400
    ReadOnly = True
    TabOrder = 3
  end
  object btnClearMemo: TButton
    Left = 352
    Top = 4
    Width = 75
    Height = 25
    Caption = 'Clear'
    TabOrder = 4
    OnClick = btnClearMemoClick
  end
end
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 12

Expert Comment

by:Ivanov_G
ID: 11781129
procedure TForm1.FormCreate(Sender: TObject);
var ListItem : TListItem;
begin
  // fill the list view
  ListItem := TListItem.Create(ListView1.Items);
  // fill element 1
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'Keyboard';
  ListItem.SubItems.Add('245');
  ListItem.SubItems.Add('');
  // element 2
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'Mouse';
  ListItem.SubItems.Add('130');
  ListItem.SubItems.Add('');
  // element 3
  ListItem := ListView1.Items.Add;
  ListItem.Caption := 'CPU';
  ListItem.SubItems.Add('10');
  ListItem.SubItems.Add('');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  counter       : Integer;
  current_item  : TListItem;
begin
  for counter := 0 to ListView1.Items.Count - 1 do
    begin
      current_item := ListView1.Items[counter];
      if UpperCase(current_item.Caption) = 'MOUSE' then
        current_item.SubItems[1] := '400';
    end;
end;
0
 

Author Comment

by:fabyola
ID: 11782680
But now when I try to read it´s value to do a sum, it reads with trash. For example: I found the Caption 'MOUSE' and added 400 to it. But when I return to it to sum 200 (to become 600) I need to read the value then do the addition. But when I read it it comes with trash like: '400' #$D#$A#$D. How can I take this trash out ?
0
 
LVL 12

Expert Comment

by:Ivanov_G
ID: 11782781
you read the sum like this:

var
  sum   : Real;
begin
  sum := FloatToStr(ListView1.Items[counter].SubItems[2]);
0
 
LVL 12

Accepted Solution

by:
esoftbg earned 500 total points
ID: 11783591
a super example from:
page:        http://www.geocities.com/esoftbg/
  link:        Q_21090603.zip
0

Featured Post

[Webinar] Cloud Security

In this webinar you will learn:

-Why existing firewall and DMZ architectures are not suited for securing cloud applications
-How to make your enterprise “Cloud Ready”, and fix your aging DMZ architecture
-How to transform your enterprise and become a Cloud Enabler

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Video by: ITPro.TV
In this episode Don builds upon the troubleshooting techniques by demonstrating how to properly monitor a vSphere deployment to detect problems before they occur. He begins the show using tools found within the vSphere suite as ends the show demonst…
This video shows how to quickly and easily deploy an email signature for all users in Office 365 and prevent it from being added to replies and forwards. (the resulting signature is applied on the server level in Exchange Online) The email signat…
Suggested Courses

885 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question