2012-04-24 127 views
1

我想從sqlite數據庫中填充listview。我的代碼是Wpf Listview不填充sqlite

using (SQLiteConnection connection = new SQLiteConnection(@"Data Source=c:\MyProjects\SqliteTest\TestData.db")) 
     { 
      connection.Open(); 
      SQLiteDataAdapter ad = new SQLiteDataAdapter(); 
      SQLiteCommand cmd = new SQLiteCommand(); 
      String str = "SELECT Name,Email FROM tblInfo"; 
      cmd.CommandText = str; 
      ad.SelectCommand = cmd; 
      cmd.Connection = connection; 
      DataSet ds = new DataSet(); 
      ad.Fill(ds); 
      myList.DataContext = ds.Tables[0].DefaultView; 
      connection.Close(); 
     } 

和XAML代碼就像

<Grid> 
    <ListView x:Name="myList" 
       Height="100" 
       HorizontalAlignment="Left" 
       Margin="10,10,0,0" 
       VerticalAlignment="Top" 
       Width="300"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="100" Header="Name" DisplayMemberBinding="{Binding Path=Name}"></GridViewColumn> 
       <GridViewColumn Width="100" Header="Email" DisplayMemberBinding="{Binding Path=Email}"></GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

沒有錯誤,但列表爲空。

回答

1

您正在將控件的DataContext設置爲您的DataSet。您需要將ListView的ItemSource設置爲DataSet,或將ItemSource綁定到DataContext,例如

<ListView ItemsSource={Binding} ... /> 
+0

感謝菲爾和blindmeis。 – 2012-04-24 13:42:56

-1

數據集沒有接口INotifyCollectionChanged和INotifyPropertyChanged。所以UI不知道數據集已經被填充。

如果數據集只更改一次,則只有在填充數據集後才能綁定(初始化)。

否則,您可以創建一個集合並實現接口。

1

菲爾是正確的,但你也可以改變

myList.DataContext = ds.Tables[0].DefaultView; 

myList.ItemsSource= ds.Tables[0].DefaultView;