Hiya tivolinewbie,

Sorry, no guru but I have been using Laurent's Grid control since he first
mentioned it at the beginning of May, and have found it absolutely
excellent. In part of a program I have written, I do a similar thing with
populating the grid from an array.

First the array is constructed fairly simply while processing a file, so
that each $value contains successive cell or column data, and $processedline
is the row (with each cell seperated by the pipe), as below:

$processedline = "$value1|$value2|$value3| etc..";
push(@procdata, $processedline);

While processing the data I keep a count of how many lines are processed. In
your case, if you make a call to retrieve the number of rows returned in
your query and set this value as the count - $processcount.

# =============================================================
# Create Grid control
$gridProcDataView = new Win32::GUI::Grid (
  -parent    => $ResultWindow,
  -name      => "gridProcDataView",
  -left      => 0,
  -top       => 246,
  -width     => 590,
  -height    => 174,
  -vscroll   => 1,
  -hscroll   => 1,
  -fixedrows => 1,
  -columns   => 10,
  -editable  => 0,
) or die "can't create new Grid for - gridProcDataView.";

# Hmmm doesn't appear to work without this.
$gridProcDataView->Resize (590, 174);

# =============== START OF PROCESSED GRID =====================
$col_index = 0;
$row_index = 0;

# First set the number of rows (from functions - &lineREPORTER)
$ResultWindow->gridProcDataView->SetRows($processcount + 1);

# Label 'Processed Data'
$ResultWindow->lblProcOPFileLocnP->Text("$outfile");
print "PROC_GRID ROWS - $processcount\n" if $DEBUG;

# Populate Header columns
$ResultWindow->gridProcDataView->SetCellText($row_index, 0,"Calling
Number");
$ResultWindow->gridProcDataView->SetCellText($row_index, 1,"Call Date");
$ResultWindow->gridProcDataView->SetCellText($row_index, 2,"Call Time");
$ResultWindow->gridProcDataView->SetCellText($row_index, 3,"Called Number");
$ResultWindow->gridProcDataView->SetCellText($row_index, 4,"Number Desc");
$ResultWindow->gridProcDataView->SetCellText($row_index, 5,"Duration");
$ResultWindow->gridProcDataView->SetCellText($row_index, 6,"Origin of
Call");
$ResultWindow->gridProcDataView->SetCellText($row_index, 7,"Destination of
Call");
$ResultWindow->gridProcDataView->SetCellText($row_index, 8,"Cost");
$ResultWindow->gridProcDataView->SetCellText($row_index, 9,"Decode Spec");

$ResultWindow->gridProcDataView->SetHeaderSort();

foreach $proclines (@procdata) {
  # Skip blank lines
  if ($proclines =~ /^$/) {
    next;
  }
  $row_index++;
  # Split line into fields
  @proclines2fields = split /\|/, $proclines;
  # now fill the cells
  for ($col_index = 0; $col_index <= 9; $col_index++) {
    $ResultWindow->gridProcDataView->SetCellText($row_index, $col_index,
$proclines2fields[$col_index]);
  }
}

# Resize Grid Cell
$ResultWindow->gridProcDataView->AutoSize();

Lastly if you are going to perform another query, you will need to empty the
grid. I haven't quite got this yet. But the code below at least empties it,
but it does not refresh the Grid if say a column was highlighted. Perhaps
someone else knows how to re-set it completely.

# Reset Grid
$ResultWindow->gridProcDataView->SetRows(1);
$ResultWindow->gridProcDataView->Refresh();

Hope this helps

rgds

Chris Wearn


Reply via email to