@@ -80,13 +80,19 @@ void QgsDualView::columnBoxInit()
80
80
// load fields
81
81
QList<QgsField> fields = mLayerCache ->layer ()->pendingFields ().toList ();
82
82
83
+ QString defaultField;
84
+
83
85
// default expression: saved value
84
86
QString displayExpression = mLayerCache ->layer ()->displayExpression ();
85
87
86
88
// if no display expression is saved: use display field instead
87
89
if ( displayExpression == " " )
88
90
{
89
- displayExpression = mLayerCache ->layer ()->displayField ();
91
+ if ( mLayerCache ->layer ()->displayField () != " " )
92
+ {
93
+ defaultField = mLayerCache ->layer ()->displayField ();
94
+ displayExpression = QString ( " COALESCE(\" %1\" , '<NULL>')" ).arg ( defaultField );
95
+ }
90
96
}
91
97
92
98
// if neither diaplay expression nor display field is saved...
@@ -96,31 +102,37 @@ void QgsDualView::columnBoxInit()
96
102
97
103
if ( pkAttrs.size () > 0 )
98
104
{
105
+ if ( pkAttrs.size () == 1 )
106
+ defaultField = pkAttrs.at ( 0 );
107
+
99
108
// ... If there are primary key(s) defined
100
109
QStringList pkFields;
101
110
102
- foreach ( int attr, pkAttrs )
111
+ Q_FOREACH ( int attr, pkAttrs )
103
112
{
104
- pkFields.append ( " \" " + fields[attr].name () + " \" " );
113
+ pkFields.append ( " COALESCE( \" " + fields[attr].name () + " \" , '<NULL>') " );
105
114
}
106
115
107
116
displayExpression = pkFields.join ( " ||', '||" );
108
117
}
109
118
else if ( fields.size () > 0 )
110
119
{
120
+ if ( fields.size () == 1 )
121
+ defaultField = fields.at ( 0 ).name ();
122
+
111
123
// ... concat all fields
112
124
QStringList fieldNames;
113
125
foreach ( QgsField field, fields )
114
126
{
115
- fieldNames.append ( " \" " + field.name () + " \" " );
127
+ fieldNames.append ( " COALESCE( \" " + field.name () + " \" , '<NULL>') " );
116
128
}
117
129
118
130
displayExpression = fieldNames.join ( " ||', '||" );
119
131
}
120
132
else
121
133
{
122
134
// ... there isn't really much to display
123
- displayExpression = " [Please define preview text]" ;
135
+ displayExpression = " ' [Please define preview text]' " ;
124
136
}
125
137
}
126
138
@@ -151,7 +163,7 @@ void QgsDualView::columnBoxInit()
151
163
connect ( previewAction, SIGNAL ( triggered () ), mPreviewActionMapper , SLOT ( map () ) );
152
164
mPreviewColumnsMenu ->addAction ( previewAction );
153
165
154
- if ( text == displayExpression )
166
+ if ( text == defaultField )
155
167
{
156
168
mFeatureListPreviewButton ->setDefaultAction ( previewAction );
157
169
}
@@ -315,7 +327,7 @@ void QgsDualView::previewColumnChanged( QObject* action )
315
327
316
328
if ( previewAction )
317
329
{
318
- if ( !mFeatureList ->setDisplayExpression ( previewAction->text () ) )
330
+ if ( !mFeatureList ->setDisplayExpression ( QString ( " COALESCE( \" %1 \" , '<NULL>' ) " ). arg ( previewAction->text () ) ) )
319
331
{
320
332
QMessageBox::warning ( this
321
333
, tr ( " Could not set preview column" )
0 commit comments