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
|
package EditableSqlModel;
use strict;
use warnings;
use QtCore4;
use QtGui4;
use QtCore4::isa qw( Qt::SqlQueryModel );
sub NEW
{
my ($class, $parent) = @_;
$class->SUPER::NEW($parent);
}
# [0]
sub flags
{
my ($index) = @_;
my $flags = this->SUPER::flags($index);
if ($index->column() == 1 || $index->column() == 2) {
$flags |= Qt::ItemIsEditable();
}
return $flags;
}
# [0]
# [1]
sub setData
{
my ($index, $value) = @_;
if ($index->column() < 1 || $index->column() > 2) {
return 0;
}
my $primaryKeyIndex = this->SUPER::index($index->row(), 0);
my $id = this->data($primaryKeyIndex)->toInt();
this->clear();
my $ok;
if ($index->column() == 1) {
$ok = this->setFirstName($id, $value->toString());
} else {
$ok = this->setLastName($id, $value->toString());
}
this->refresh();
return $ok;
}
# [1]
sub refresh
{
this->setQuery('select * from person');
this->setHeaderData(0, Qt::Horizontal(), Qt::Variant(Qt::String(Qt::Object::tr('ID'))));
this->setHeaderData(1, Qt::Horizontal(), Qt::Variant(Qt::String(Qt::Object::tr('First name'))));
this->setHeaderData(2, Qt::Horizontal(), Qt::Variant(Qt::String(Qt::Object::tr('Last name'))));
}
# [2]
sub setFirstName
{
my ($personId, $firstName) = @_;
my $query = Qt::SqlQuery();
$query->prepare('update person set firstname = ? where id = ?');
$query->addBindValue(Qt::Variant(Qt::String($firstName)));
$query->addBindValue(Qt::Variant(Qt::String($personId)));
return $query->exec();
}
# [2]
sub setLastName
{
my ($personId, $lastName) = @_;
my $query = Qt::SqlQuery();
$query->prepare('update person set lastname = ? where id = ?');
$query->addBindValue($lastName);
$query->addBindValue($personId);
return $query->exec();
}
1;
|