2011-08-05 7 views
2

各リクエストで異なる数の列と行を持つ結果を返すオンラインサービス(Googleデータフィード)を照会しています。WPF - 動的列/行を使用した結果グリッドを表示

これまでのところ、私はデータグリッドまたはグリッドを私のために働かせることができませんでした。理想的には、うまくいくようなものがほしいのですが、行を追加して個々のセルの値を設定するだけです。

答えて

1

クラスを作成することができます。列を表し、列のコレクションを作成するmyGridCol。 Googleのデータフィードを読み、列を作成します。次に列を個別に追加する必要があります。コードの背後にあるDataGridColumnsとしてmyGridCol [0]、myGridCol [1] ..列コレクションに直接バインドすることはできません。

列のコレクションを持つ行のコレクションにバインドするだけです。
私の場合は、GridViewコントロールを使用していますが、私は私の場合のsDocsでのDataGrid と同じアプローチを使用していたのObservableCollection SDOCは、パブリックリストDocFieldsに 私はそれがあったことを確認しましたので、Fieldsコレクションは、各SDOCでまったく同じですがありますされ。 Fieldsコレクションが各sDocで同じでない場合、それはそのようなものではありません。
sDocsはGridViewのItemsSourceです
次に、コードの背後に列を追加します。前に述べたように、列コレクションに直接バインドすることはできません。プロパティ(例:DispValueShort)にパスをバインドすることもできます。 DocFieldのための私のクラスは、他のプロパティとメソッドを持っています。 DocFieldは、実際には、Abstract Property DispValueShortを持つ抽象クラスです。次に、文字列の編集が日付の編集と異なるため、DocFieldを実装する文字列、日付、列挙のクラスを用意しています。私は単価値と多価値のクラスも持っています。これは安定した生産アプリケーションです。列の作成

sDocBaseResultDocsFieldsIndex = 0;  
    foreach (GabeLib.DocField docField in sDocBaseResultDocsFields) 
    { 
     // Debug.WriteLine(" sDocBaseResultDocsFields DispName = " + docField.FieldDef.DispName); 
     if (fd.FieldDef == docField.FieldDefApplied.FieldDef) 
     { 
      gvc = new GridViewColumn();     
      gvch = new GridViewColumnHeader(); 
      gvch.Content = fd.FieldDef.DispName; 
      gvch.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch; 
      if (fd.FieldDef.Sort) 
      { 
       gvch.Click += new RoutedEventHandler(SortClick); 
       gvch.Tag = fd.FieldDef.Name; 
      } 

      if (!fd.AppliedDispGrid) gvc.Width = 0; // how to hide 
      gvc.Header = gvch; 

      gvBinding = new Binding(); 
      gvBinding.Mode = BindingMode.OneWay; 
      gvBinding.Path = new PropertyPath("DocFields[" + sDocBaseResultDocsFieldsIndex.ToString() + "].DispValueShort"); 

      template = new DataTemplate(); 
      textblock = new FrameworkElementFactory(typeof(TextBlock)); 
      textblock.SetValue(TextBlock.TextProperty, gvBinding); 
      textblock.SetValue(TextBlock.TextTrimmingProperty, TextTrimming.WordEllipsis); 

      // <Setter Property="TextTrimming" Value="WordEllipsis" /> 

      template.VisualTree = new FrameworkElementFactory(typeof(Grid)); 
      template.VisualTree.AppendChild(textblock); 

      gvc.CellTemplate = template; 

      gvSearchResults.Columns.Add(gvc); 
      break; 
     } 
     sDocBaseResultDocsFieldsIndex++; 
    } 
+0

後ろ

<ListView Grid.Row="1" Grid.Column="0" x:Name="lvSrchResulsGrid" ItemsSource="{Binding Path=MyGabeLib.Search.SDocs}" 

コードをバインド

は簡単です。特定のセルにデータを追加するにはどうすればよいですか? – user880954

関連する問題