QSqlRelationalTableModel::setFilter(const QString & filter)
Есть в этом методе одна недокументированая особенность связаная с внешними ключами.
- Если ни одно отношение (QSqlRelation) в модель не добавлено, то её поведение ни чем не отличается от модели QSqlTableModel.
- Если добавлено хотя бы одно отношение, то для колонок без отношения строка фильтра должна выглядеть как "таблица.колонка = значение" (оператор сравнения естественно заменяем тем чем нам необходимо).
- Если добавлено хотя бы одно отношение, то для колонок с отношением строка фильтра должна выглядеть как "колонка = значение", но вместо имени колонки в таблице указанной методом QSqlRelationalTableModel::setTable() необходимо подставлять имя колонки указанной при создании отношения QSqlRelation::displayColumn().
QHash<QString, QString> filters; //ключ - имя колонки, значение - значение фильтра
QStringList filter;
QString tableName = table->tableName();
foreach(QString key, filters.keys())
if(_model->relation(_model->record().indexOf(key)).isValid()) {
filter << key + "='" + filters.value(key) + "'";
} else {
filter << tableName + "." + key + "='" + filters.value(key) + "'";
}
_model->setFilter(filter.join(" AND "));
_model->select();
Комментарии: 2:
Форматирование тут неудобное
Ага, я буду пробывать DepestSender (FireFox plugin), там поудобнее, и с угловыми скобками проблем меньше.
Отправить комментарий
Подпишитесь на каналы Комментарии к сообщению [Atom]
<< Главная страница