diff options
author | Frank Schönheit <fs@openoffice.org> | 2010-02-25 12:47:23 +0000 |
---|---|---|
committer | Frank Schönheit <fs@openoffice.org> | 2010-02-25 12:47:23 +0000 |
commit | 88df38f41b5f6317d1b9faeafe846bb4c6f8753b (patch) | |
tree | 290b883496bb4e7e140d44380054796429d1fc5b /forms | |
parent | native292 #161926# new jre6u19 (diff) | |
download | core-88df38f41b5f6317d1b9faeafe846bb4c6f8753b.tar.gz core-88df38f41b5f6317d1b9faeafe846bb4c6f8753b.zip |
#i109081# translateDbColumnToControlValue: force the current value to be the same type as our bound field (if we have one), since the values we will compare it with will also have this type
Diffstat (limited to 'forms')
-rw-r--r-- | forms/source/component/ListBox.cxx | 22 | ||||
-rw-r--r-- | forms/source/component/ListBox.hxx | 5 |
2 files changed, 14 insertions, 13 deletions
diff --git a/forms/source/component/ListBox.cxx b/forms/source/component/ListBox.cxx index 0aa90d9919cf..88135c040d71 100644 --- a/forms/source/component/ListBox.cxx +++ b/forms/source/component/ListBox.cxx @@ -41,7 +41,6 @@ /** === begin UNO includes === **/ #include <com/sun/star/util/XNumberFormatTypes.hpp> #include <com/sun/star/sdbc/XRowSet.hpp> -#include <com/sun/star/sdbc/DataType.hpp> #include <com/sun/star/container/XIndexAccess.hpp> #include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp> #include <com/sun/star/sdb/XQueriesSupplier.hpp> @@ -167,7 +166,7 @@ namespace frm ,OErrorBroadcaster( OComponentHelper::rBHelper ) ,m_aListRowSet( getContext() ) ,m_nNULLPos(-1) - ,m_bBoundComponent(sal_False) + ,m_nBoundColumnType( DataType::SQLNULL ) { DBG_CTOR(OListBoxModel,NULL); @@ -189,7 +188,7 @@ namespace frm ,m_aBoundValues( _pOriginal->m_aBoundValues ) ,m_aDefaultSelectSeq( _pOriginal->m_aDefaultSelectSeq ) ,m_nNULLPos(-1) - ,m_bBoundComponent(sal_False) + ,m_nBoundColumnType( DataType::SQLNULL ) { DBG_CTOR(OListBoxModel,NULL); } @@ -629,7 +628,7 @@ namespace frm DBG_ASSERT( !hasExternalListSource(), "OListBoxModel::loadData: cannot load from DB when I have an external list source!" ); m_nNULLPos = -1; - m_bBoundComponent = sal_False; + m_nBoundColumnType = DataType::SQLNULL; // pre-requisites: // PRE1: connection @@ -832,20 +831,19 @@ namespace frm ::dbtools::FormattedColumnValue aValueFormatter( getContext(), m_xCursor, xDataField ); // Feld der BoundColumn des ResultSets holen - sal_Int32 nBoundColumnType = DataType::SQLNULL; + m_nBoundColumnType = DataType::SQLNULL; if ( ( nBoundColumn > 0 ) && m_xColumn.is() ) { // don't look for a bound column if we're not connected to a field try { Reference< XPropertySet > xBoundField( xColumns->getByIndex( nBoundColumn ), UNO_QUERY_THROW ); - OSL_VERIFY( xBoundField->getPropertyValue( ::rtl::OUString::createFromAscii( "Type" ) ) >>= nBoundColumnType ); + OSL_VERIFY( xBoundField->getPropertyValue( ::rtl::OUString::createFromAscii( "Type" ) ) >>= m_nBoundColumnType ); } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); } } - m_bBoundComponent = ( nBoundColumnType != DataType::SQLNULL ); // Ist die LB an ein Feld gebunden und sind Leereintraege zulaessig // dann wird die Position fuer einen Leereintrag gemerkt @@ -860,9 +858,9 @@ namespace frm aStr = aValueFormatter.getFormattedValue(); aDisplayList.push_back( aStr ); - if ( m_bBoundComponent ) + if ( impl_hasBoundComponent() ) { - aBoundValue.fill( nBoundColumn + 1, nBoundColumnType, xCursorRow ); + aBoundValue.fill( nBoundColumn + 1, m_nBoundColumnType, xCursorRow ); aValueList.push_back( aBoundValue ); } @@ -907,7 +905,7 @@ namespace frm // NULL eintrag hinzufuegen if (bUseNULL && m_nNULLPos == -1) { - if ( m_bBoundComponent ) + if ( impl_hasBoundComponent() ) aValueList.insert( aValueList.begin(), ORowSetValue() ); aDisplayList.insert( aDisplayList.begin(), ORowSetValue( ::rtl::OUString() ) ); @@ -940,7 +938,7 @@ namespace frm { ValueList().swap(m_aBoundValues); m_nNULLPos = -1; - m_bBoundComponent = sal_False; + m_nBoundColumnType = DataType::SQLNULL; if ( !hasExternalListSource() ) setFastPropertyValue( PROPERTY_ID_STRINGITEMLIST, makeAny( StringSequence() ) ); @@ -1035,7 +1033,7 @@ namespace frm Sequence< sal_Int16 > aSelectionIndicies; ORowSetValue aCurrentValue; - aCurrentValue.fill( getFieldType(), m_xColumn ); + aCurrentValue.fill( impl_hasBoundComponent() ? m_nBoundColumnType : getFieldType(), m_xColumn ); // reset selection for NULL values if ( aCurrentValue.isNull() ) diff --git a/forms/source/component/ListBox.hxx b/forms/source/component/ListBox.hxx index d2af81c1c52c..04db6069d89e 100644 --- a/forms/source/component/ListBox.hxx +++ b/forms/source/component/ListBox.hxx @@ -41,6 +41,7 @@ #include <com/sun/star/awt/XFocusListener.hpp> #include <com/sun/star/awt/XListBox.hpp> #include <com/sun/star/form/XChangeBroadcaster.hpp> +#include <com/sun/star/sdbc/DataType.hpp> /** === end UNO includes === **/ #include <comphelper/asyncnotification.hxx> @@ -82,7 +83,7 @@ class OListBoxModel :public OBoundControlModel // </properties> sal_Int16 m_nNULLPos; // position of the NULL value in our list - sal_Bool m_bBoundComponent : 1; + sal_Int32 m_nBoundColumnType; private: ::connectivity::ORowSetValue getFirstSelectedValue() const; @@ -177,6 +178,8 @@ private: void impl_refreshDbEntryList( bool _bForce ); ValueList impl_getValues() const; + + bool impl_hasBoundComponent() const { return m_nBoundColumnType != ::com::sun::star::sdbc::DataType::SQLNULL; } }; //================================================================== |