2012-01-20 4 views
1

データベース(たとえば "CTY")からのコードをユーザーフレンドリーな説明( "City"など)に変換するコンバータクラス(IValueConverterの実装)を作成しました。私はXCeed WPF Datagridcontrolの1つの列でコンバーターを使用したいと思いますが、コンバーターを設定する必要があるプロパティーはわかりません。私はまた、スタイルを使用してDataCellに接続しようとしましたが、正しく動作しません。コンバータはすべてのセルではなく、1つの列にのみ適用する必要があるため、必要ではないと思います。DataGrid列にValueConverterを適用します。

カラムも自動生成されるため、実行時にそれを適用できればすばらしいでしょう!

私は、列のどのプロパティ私は(エクシード列は「バインディング」プロパティを持っているdoens'tにコンバータをapllyしなければならないか分からない。あなたたちは何か提案はありますか?

より多くの例やコード。のために要求された場合に提供することができます私は私の問題は、あなたのために少し明らかであると思います

EDIT:

これは私が私のXAMLファイルで使用するものです。

 <utils:BudgettaireEntiteitConverter x:Key="BudgettaireEntiteitConverter" /> 

    <xcdg:DataGridCollectionViewSource x:Key="GridViewSourceDefault" 
               Source="{Binding Converter={StaticResource BudgettaireEntiteitConverter}}"> 
       <xcdg:DataGridCollectionViewSource.DetailDescriptions> 
         <lc:ActieOverzichtBudgettenDescription 
                 RelationName="Budgetten" 
                 AutoCreateDetailDescriptions="False" 
                 AutoCreateForeignKeyDescriptions="False" 
                 AutoCreateItemProperties="True" 
                 Title="Budgetten" > 
          <lc:ActieOverzichtBudgettenDescription.StatFunctions> 
           <xcdg:SumFunction ResultPropertyName="SumOfBedragInBudget" 
               SourcePropertyName="BedragInBudget" /> 

           <xcdg:SumFunction ResultPropertyName="SumOfBedragInAfwachting" 
               SourcePropertyName="BedragInAfwachting" /> 
          </lc:ActieOverzichtBudgettenDescription.StatFunctions> 

         <lc:ActieOverzichtBudgettenDescription.DetailDescriptions> 
           <lc:ActieBudgetRegistratieSleutelsDescription RelationName="RegistratieSleutels" 
                       AutoCreateDetailDescriptions="False" 
                       AutoCreateForeignKeyDescriptions="False" 
                       AutoCreateItemProperties="True" 
                       Title="Registratiesleutels" /> 
       </lc:ActieOverzichtBudgettenDescription.DetailDescriptions> 

     </lc:ActieOverzichtBudgettenDescription> 

    </xcdg:DataGridCollectionViewSource.DetailDescriptions> 

</xcdg:DataGridCollectionViewSource> 

<xcdg:DataGridControl x:Name="lsvActies" 
           TargetUpdated="OnListTargetUpdated" 
           ItemsSourceName="Acties" 
           IsRefreshCommandEnabled="False" 
           rf:XceedGridService.LoadUserSettings="True" 
           rf:XceedGridService.SettingsKeyName="ActieOverzichtGridKey" 
           rf:XceedGridService.ItemContextMenu="{StaticResource ActieContextMenu}"> 

       <xcdg:DataGridControl.CommandBindings> 
       <CommandBinding Command="Delete" Executed="ExecuteDeleteItem" CanExecute="CanExecuteDeleteItem"/> 
      </xcdg:DataGridControl.CommandBindings> 

     </xcdg:DataGridControl> 

これは私のコンバータです:

Public Class BudgettaireEntiteitConverter 
     Implements IValueConverter 

     Private hs As Hashtable = FillHashTable() 


     Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert 

      If hs.ContainsKey(value) 
       Return hs(value).ToString() 
      Else 
       Return Nothing 
      End If 

     End Function 

     Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack 
      Throw New NotSupportedException("ConvertBack not supported!") 
     End Function 

     Function FillHashTable() As Hashtable 
      Dim hashtable As New Hashtable 
      Dim dataCache = New ReferentieDataCache 

      Dim budgettaireEntiteiten = dataCache.GetBudgettaireEntiteiten() 

      For Each budgettaireEntiteitRow As BudgettaireEntiteitRow In budgettaireEntiteiten 
       hashtable.Add(budgettaireEntiteitRow.BudgettaireEntiteit, budgettaireEntiteitRow.DisplayOmschrijving) 
      Next 

      Return hashtable 
     End Function 

    End Class 

はEDIT2:

私はDataGridItemPropertyてみました(以下のXAMLを参照)が、私は、私はConverterクラスに入力しないと、グリッドがちょうどロードデバッグするとき変換されたデータではなく初期のデータと比較します。

<xcdg:DataGridCollectionViewSource.ItemProperties> 
     <xcdg:DataGridItemProperty Name="BudgettaireEntiteit" Converter="{StaticResource BudgettaireEntiteitConverter}" /> 
</xcdg:DataGridCollectionViewSource.ItemProperties> 

私は存在しないフィールドを入力した場合、それはエラーがスローされますので、それは間違いなくBudgettaireEntiteitフィールドを知っています。今すぐ何もしません

+0

データグリッドが作成され、データが割り当てられているコードの一部を表示できますか。 –

+0

私のコードをいくつか追加しました。 ) –

+0

私の頭に浮かべる最初のことは、可能であれば、データがグリッドに割り当てられている場所を見つけることができないように見えますが、フレームワークのどこかにあるので、列の自動生成を停止して、ビューに自分自身を追加することができます。このようにして、必要な列だけにコンバーターを追加することができます。 –

答えて

4

DataGridItemPropertyでDataGridCollectionViewSourceを使用できます。このオブジェクトには、作成したコンバータを必要な列に割り当てるために使用できるConverterプロパティがあります。

ような何か:

<xcdg:DataGridItemProperty Name="RequiredColumn" 
     Converter="{StaticResource BudgettaireEntiteitConverter}"/> 

exceed documentationでより詳細な例。

+0

ありがとう、これは私が探していたものでしたが、まだ小さな問題があります(更新された回答を見てください:)) –

+0

DataGridのItemsSourceはDataGridCollectionViewSourceにバインドされ、DataGridItemPropertyのNameプロパティはその列にバインドされたオブジェクトプロパティとまったく同じです。 –

+0

はい、間違った名前を入力するとエラーになりますが、今は何もしませんので、名前は正しいです... –

関連する問題