Solved

Using ListView

Posted on 2004-08-11
7
15,725 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
What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

 
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 125 total points
ID: 11783591
a super example from:
page:        http://www.geocities.com/esoftbg/
  link:        Q_21090603.zip
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

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

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
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…
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

777 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