2017-09-05 11 views
-1

私はデータグリッドを持っており、displayindexをデータコンテキストにバインドします(問題ではありません)。私はフィールド名とtableIDを組み合わせた文字列パラメータを取るコンバータを使用します。データベースからその列の注文番号を抽出することができます(データベースから) コンバーターは決して起動しませんでした。私はフォールバックだと思います。コンバータが表示されているインデックスを表示しない

結合プログラムで後の列が作成されている作成

public class FieldNameToIndex : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     string[] data = parameter.ToString().Split('-'); 
     if(data.Length == 2) 
     { 
      long val; 
      if (!long.TryParse(data[1], out val)) 
       return 0; 

      using (AmethystEntities db = new AmethystEntities()) 
      { 
       string fieldName = data[0]; 
       Fields mat = db.Fields.Where(m => m.FieldName == fieldName && val == m.TableID).FirstOrDefault(); 
       if (mat != null) 
        return (mat.DisplayIndex != null ? mat.DisplayIndex : 0); 
      } 
     } 

     return 0;   
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     return value; 
    } 
} 

答えて

1

:ここ

<DataGridTemplateColumn Header="Col1" DisplayIndex="{Binding CarID, Converter={StaticResource FieldNameToIndex}, FallbackValue=0, ConverterParameter=Col1-9}"> 

コンバータクラスの:ここにXAMLラインです

<DataGrid Loaded="DataGrid_Loaded"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn x:Name="col1" Header="Col1"> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 

private void DataGrid_Loaded(object sender, RoutedEventArgs e) 
{ 
    BindingOperations.SetBinding(col1, DataGridColumn.DisplayIndexProperty, 
     new Binding("CarID") { Source = this, Converter = new FieldNameToIndex(), FallbackValue = 0 }); 
} 

列が次々に作成されますし、最初の列が作成されます時間によってDisplayIndexのみに設定することができますので、DataGridとのColumnsコレクションには他の列はありません0

+0

ありがとうございました – user7925257

関連する問題