ListViewを使用する WPF
ListViewを使用する WPF
データグリッドとよく似た物に、リストビューがある。
違う所は、と思ってみると、そんなに違うことが無いのかも?
Windows版では、アイコンモードなど多岐にわたってプロパティーで変更できた気がしますが、
WPF版は、ゴリゴリと手で書かなければだめらしい。
となれば、DataGridぽくもできてしまう。
どちらを使うか悩みが増えるかも?
とりあえず、データを表示してみる。
基本は、
<ListView>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding 県}" Header="県"/>
の構造。
Button1_Clickの方は、XAMLにデータバインドを書いて、Me.ListView1.ItemsSourceに、DataViewを入れておくだけ。
個人的にはこちらの方が好み。
Button2_Clicknのほうは、VBでバインド等を行う方法。
これだと、SQLの変更が、表示順に影響するのでちょっと心もとないですね。
<Window x:Class="WindowListView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowListView" Height="300" Width="840">
<Grid>
<ListView Height="199" HorizontalAlignment="Left" Margin="12,12,0,0" Name="ListView1" VerticalAlignment="Top" Width="378" ItemsSource="{Binding}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding 県}" Header="県"/>
<GridViewColumn DisplayMemberBinding="{Binding 郵便番号}" Header="郵便番号"/>
<GridViewColumn DisplayMemberBinding="{Binding 市区町村}" Header="市区町村"/>
<GridViewColumn DisplayMemberBinding="{Binding 町域}" Header="町域"/>
</GridView>
</ListView.View>
</ListView>
<Button Content="SQLserver" Height="24" HorizontalAlignment="Left" Margin="12,0,0,12" Name="Button1" VerticalAlignment="Bottom" Width="91" />
<Button Content="手動" Height="26" HorizontalAlignment="Left" Margin="412,223,0,0" Name="Button2" VerticalAlignment="Top" Width="99" />
<ListView Height="200" HorizontalAlignment="Left" Margin="398,16,0,0" Name="ListView2" VerticalAlignment="Top" Width="408" />
</Grid>
</Window>
Imports System.Data
Imports System.Data.SqlClient
Imports System.Collections.ObjectModel 'これをインポートする必要がある!
Public Class WindowListView
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
'SQLサーバからKEN_ALLを検索取得
Dim DA As New SqlDataAdapter
Dim cnn As New SqlConnection
Dim cmnd As New SqlCommand
Dim ds As DataSet = New DataSet
Try
'すべてのテーブル内のすべての行を削除して、データの DataSet を消去します。
ds.Clear()
'コネクションストリングを設定
cnn.ConnectionString = "user id=vbuser;password=sa;initial catalog=MYTEST;data source=(local);Connect Timeout=5"
'cnn.ConnectionString = "user id=vbuser;password=sa;initial catalog=MYTEST;data source=PC名\SQLEXPRESS;Connect Timeout=5"
'この接続は明示的にオープンクローズする必要がない。Fillでオープンクローズを勝手にしてくれる
Dim i As New System.Diagnostics.Stopwatch()
i.Start()
'SQL文を設定し、コマンドにコネクションを設定する
Dim MySQL As String
'わざと並びを変えて
MySQL = "SELECT top 10 県,cast([郵便番号] as decimal) AS 郵便番号,市区町村,町域 FROM KEN_ALL WHERE 県 in('北海道')"
cmnd.CommandText = MySQL
cmnd.Connection = cnn
'データアダプターにコマンドを設定
DA.SelectCommand = cmnd
'レコード数の取得
Dim reCount As Integer
'データセットにデータの実態を取得する()
reCount = DA.Fill(ds, "KEN_ALL")
'MessageBox.Show(reCount)
Dim tbv As New DataView
tbv.Table = ds.Tables("KEN_ALL")
Me.ListView1.ItemsSource = tbv
i.Stop()
Debug.Print(i.ElapsedMilliseconds.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message, "SQL検索", MessageBoxButton.OK, MessageBoxImage.Error)
End Try
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click
'SQLサーバからKEN_ALLを検索取得
Dim DA As New SqlDataAdapter
Dim cnn As New SqlConnection
Dim cmnd As New SqlCommand
Dim ds As DataSet = New DataSet
Try
'すべてのテーブル内のすべての行を削除して、データの DataSet を消去します。
ds.Clear()
'コネクションストリングを設定
cnn.ConnectionString = "user id=vbuser;password=sa;initial catalog=MYTEST;data source=(local);Connect Timeout=5"
'cnn.ConnectionString = "user id=vbuser;password=sa;initial catalog=MYTEST;data source=PC名\SQLEXPRESS;Connect Timeout=5"
'この接続は明示的にオープンクローズする必要がない。Fillでオープンクローズを勝手にしてくれる
Dim i As New System.Diagnostics.Stopwatch()
i.Start()
'SQL文を設定し、コマンドにコネクションを設定する
Dim MySQL As String
'わざと並びを変えて
MySQL = "SELECT top 10 郵便番号,市区町村,町域 FROM KEN_ALL WHERE 県 in('北海道')"
cmnd.CommandText = MySQL
cmnd.Connection = cnn
'データアダプターにコマンドを設定
DA.SelectCommand = cmnd
'レコード数の取得
Dim reCount As Integer
'データセットにデータの実態を取得する()
reCount = DA.Fill(ds, "KEN_ALL")
'MessageBox.Show(reCount)
Dim tbv As New DataView
tbv.Table = ds.Tables("KEN_ALL")
Dim gv As GridView = New GridView
Dim gvc1 As New GridViewColumn
Dim gvc2 As New GridViewColumn
gvc1.Header = "郵便番号"
gvc1.DisplayMemberBinding = New Binding(String.Format("[0]"))
gv.Columns.Add(gvc1)
ListView2.View = gv
gvc2.Header = "市区町村"
gvc2.DisplayMemberBinding = New Binding(String.Format("[1]"))
gv.Columns.Add(gvc2)
ListView2.View = gv
Me.ListView2.ItemsSource = tbv
i.Stop()
Debug.Print(i.ElapsedMilliseconds.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message, "SQL検索", MessageBoxButton.OK, MessageBoxImage.Error)
End Try
End Sub
End Class
|
|