DataGridからFlexGridへの移行
FlexGridを使う局面としては、新規に作成する場合以外にもDataGridからの置き換え(移行)という局面もあると思います。そこで、DataGridを使ったプログラムをもとにして、FlexGridに移行する手順を確認していきます。
コンポーネントの追加
FlexGridは標準コンポーネントではないので、IDEにコンポーネントを取り込まなければなりません。ツールボックスでアイテムの追加を行い「C1FlexGrid」を指定して、FlexGridコントロールをツールボックスに追加します。
FlexGridでの一覧表示画面のデザイン
FlexGridを使用するための前準備としては、次の2つの手順が必要です。
- 「C1.Silverlight.FlexGrid.4」に対する参照設定の追加
- XAML定義に「
xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"」を追記
この手順は、FlexGridコントロールをツールボックスからドラッグ&ドロップすれば自動的に行われます。よって、DataGridからFlexGridに移行するときに最初に行う事は、DataGrid部分の書き換えではなく、ツールボックスからFlexGridコントロールをXAML上にドラッグ&ドロップする事です。それから、DataGridに書かれている属性をFlexGrid側のXAML定義の中にコピーして、DataGrid部分を削除します。
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button x:Name="Get_Button" Content="取得" Width="100"
Click="Get_Button_Click" />
</StackPanel>
<c1:C1FlexGrid Grid.Row="1"
AutoGenerateColumns="True"
HorizontalAlignment="Left"
x:Name="Result_DataGrid"
VerticalAlignment="Top"
Height="227"
Width="500"
SelectionMode="RowRange">
</c1:C1FlexGrid>
</Grid>
XAML定義としては「sdk:DataGrid」を「c1:C1FlexGrid」に置き換え、「SelectionMode="RowRange"」の定義を追記しただけです。
FlexGridにおける一覧表示させるコード
今回のサンプルコードでは、コード側はDataGridの場合のコードがそのまま使えるので、変更はありません。
一覧表示の実行
XAML側とコード側が完成したら実行してみましょう。
IDEから実行すれば自動的にWebブラウザが立ち上がり、その中でSilverlightが読み込まれて画面が表示されます。[取得]ボタンをクリックすると、「#wp7jp」のハッシュタグがついたTwitterの発言を一覧表示します。
DataGridと同じような結果となりましたが、「from_user」欄の列幅が異なります。これはDataGridが該当列に表示されている情報の最大幅に、自動的に調整をしているからです。
AutoSizeColumnsを使用
DataGridと同じ列幅を実現するためには、FlexGrid側にデータ連結した後に「AutoSizeColumns」を設定する必要があります。
Private Sub Webs_DownloadStringCompleted(sender As Object,
e As DownloadStringCompletedEventArgs) _
Handles Webs.DownloadStringCompleted
Me.Get_Button.IsEnabled = True
Me.Cursor = Cursors.Arrow
If e.Error IsNot Nothing Then
MessageBox.Show(e.Error.Message)
Else
Dim serializer As New DataContractJsonSerializer(GetType(TSearchResult))
Using stream As New System.IO.MemoryStream(Encoding.UTF8.GetBytes(e.Result))
Dim result As TSearchResult = CType(serializer.ReadObject(stream),
TSearchResult)
Dim view As New Data.PagedCollectionView(result.results)
Me.Result_DataGrid.ItemsSource = view
Me.Result_DataGrid.AutoSizeColumns(0, Me.Result_DataGrid.Columns.Count - 1, 0)
End Using
End If
End Sub
この設定を行えば、FlexGridでも自動的に列幅が設定されます。



