Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10254[/thread]

TableMatrix::Spreadsheet Zeile markieren



<< >> 2 Einträge, 1 Seite
pktm
 2007-08-29 14:29
#98814 #98814
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich glaube ich hatte das schonmal, finde es aber nleider nicht mehr :-/

Wie kann ich vernünftig eine Zeile in einer TableMatrix::Spreadsheet markieren?
In einer solchen Tabelle liste ich eine Reihe von Daten auf. Je eine Zeile = 1 Datensatz. Wenn man auf einen Datensatz klickt sollen die Informationen daraus aufbereitet werden.

Mein bisheriger Code, auszugsweise, aber sollte funktionieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/Perl/bin/perl

use strict;
use warnings;
use Data::Dumper qw/Dumper/;
use DBI;
use Carp;
use SQL::Abstract;
use Tk;
use Tk::TableMatrix::Spreadsheet;
use Perl6::Say;

my $mw = tkinit();

my %gui = ();

my %table = ();
my $t = $mw->Scrolled(
'Spreadsheet',
-cols => 5,
-rows => 500,
-width => 5,
-height => 6,

-titlerows => 1,
-titlecols => 0,

-variable => \%table,

-selectmode => 'extended',
-selecttype => 'row',
-selecttitle => 0,

-state => 'disabled',
-bg => 'white',
-scrollbars => 'se',
);

$t->configure(-state => 'normal',);
$t->set('0,0', "IdNum");
$t->set('0,1', "Word");
$t->set('0,2', "Mann");
$t->set('0,3', "IdNumLemma");
$t->set('0,4', "FlectType");
$t->configure(-state => 'disabled',);

$t->pack(-fill => 'x');

# - Initialisierung
initFuelleTabelle($t);

# Jetzt die passenden Kommandos einbauen
$t->configure(
-rowtagcommand => sub{
my $row = shift;

say '-' x 40;
say localtime() . "";
say "Zeile: $row";
},
);

$mw->MainLoop();

=head1 METHODEN

=head2 initFuelleTabelle($t)

Füllt die Tabelle zum Programmstart mit Daten.

=cut

sub initFuelleTabelle {
my $table = shift;

# das jetzt nur mal so zum Testen für euch

for ( my $row = 1; $row < 10; $row++ ) {
$t->configure(-state => 'normal',);
$t->set("$row,0", "IdNum");
$t->set("$row,1", "Word");
$t->set("$row,2", "Mann");
$t->set("$row,3", "IdNumLemma");
$t->set("$row,4", "FlectType");
$t->configure(-state => 'disabled',);
} # /for

} # /initFuelleTabelle


Ich habe das Problem, dass manchmal die falsche Zeile zurück geliefert wird, oder scheinbar arbiträr mehrfach selektiert wird. das nervt natürlich unheimlich.
Ich könnte jetzt anfangen mir zu merken, welche Zeile gerade markeirt ist und Selektionen auf die bereits markeirte Zeile ausschließen.
Aber das behebt noch nicht das Problem, dass manchmal, wenn ich z.B. die 3. Zeile markiert habe und dann auf die Zeile darüber klicke (nicht die Titelzeile!) die Selektion trotzdem Zeile 3 zurück liefert.

Hat da jemand eine gute Lösung? Oder Ideen wie man das vernünftig in den Griff bekommt?
Ich möchte unbedingt diese tabellarische Form beibehalten, allerdings nicht zwangsweise mit diesem Widget, da die Inhalte ohnehin nicht verändert werden können sollen. Was ich aber auch nciht möchte ist mir eine Tabelle mittels grid und Labels zusammen bauen, das sehe ich anbetracht der Vielzahl an Modulen auf CPAN nicht ein :)

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2007-08-29 15:33
#98823 #98823
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hiu toll, ich habe was gefunden.
-rowtagcmd war nicht das, was ich haben wollte.
-browsecommand ist die Wahl, auch wenn dafür doppelklicken muss um eine Selektion zu machen:

Code (perl): (dl )
1
2
3
4
5
6
7
-browsecommand => sub{
            my ($von, $nach) = @_;
            
            my $row = (split(m/\,/, $nach))[0];

            say "Zeile: $row";
}
http://www.intergastro-service.de (mein erstes CMS :) )
<< >> 2 Einträge, 1 Seite



View all threads created 2007-08-29 14:29.