2011-01-18 19 views
2

C#とWPFの新機能ですので、これは簡単な問題です。SQL Server(WPF)からデータを取得したときに、選択したListViewの値を取得する方法

私はSQL Serverテーブルからデータを取得するリストビューを持っています。

<ListView Width="450" Margin="10" Grid.Row="1" ItemsSource="{Binding Path=Table}" Name="FIData" SelectionChanged="FIData_SelectionChanged"> 
     <ListView.View> 
     <GridView> 
      <GridViewColumn Header="FI #" DisplayMemberBinding="{Binding Path=Id}"/> 
      <GridViewColumn Header="FI Short Name" DisplayMemberBinding="{Binding Path=ShortName}"/> 
      <GridViewColumn Header="FI Long Name" DisplayMemberBinding="{Binding Path=LongName}"/> 
      <GridViewColumn Header="Last Load Date" DisplayMemberBinding="{Binding Path=MostRecentEffectiveDate}"/> 
     </GridView> 
     </ListView.View> 
    </ListView> 

SqlConnection con = new SqlConnection(); 
    SqlDataAdapter ad = new SqlDataAdapter(); 
    SqlCommand cmd = new SqlCommand(); 

    string strSql = "SELECT Id, ShortName, LongName, MostRecentEffectiveDate FROM Institutions"; 


public void BindData() 
    { 
     cmd.CommandText = strSql; 
     ad.SelectCommand = cmd; 
     con.ConnectionString = "Data Source=DEVDB\\ABC; Initial Catalog=Cat1; Integrated Security=True"; 
     cmd.Connection = con; 
     DataSet ds = new DataSet(); 
     ad.Fill(ds); 
     FIData.DataContext = ds.Tables[0].DefaultView; 
     con.Close(); 
    } 

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     BindData(); 
    } 

ボタンをクリックすると、BindDataメソッドが呼び出され、私のリストビューには大丈夫です。私の問題は、選択したリスト項目からデータ値を取得する方法がわかりません。

他のすべての例では、ユーザーはC#コードまたはXMLなどのソースのプロパティからデータを入力しています。おそらく私の問題の1つは、オブジェクトをかなり理解していないと思っていますが、選択したリストから特定の値を取得する方法を私に見せてくれることを期待していました。後でこれらの値の1つを使用したいと思います。

おかげで、

ジェイソン

ここ

答えて

0

、あなたは:

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

それはあなたのようなデータバインディングシナリオで使用できる仮想プロパティを持つ実際のDataTableをマップします。

しかし、データ値を取得する方法に関する質問に答えるには、あなたのリストビューのためにFIData_SelectionChangedイベントがあるので、あなたはかなり近いと思います。その場合:

private void FIData_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var myListView = sender as ListView; 
    if(myListView != null) 
    { 
    var selectedItem = myListView.SelectedItem; 

    //selectedItem should have an array, which contains data values for the bound object. 
    } 
} 

デバッガで上記selectedItemを検査しなければならないし、それに含まれるデータを見てください。

+0

ありがとうございます。しかし、私がそうすると、selectedItemはnullの値を返しています。 – Jason

+0

@Jason:なぜそれが 'null'(申し訳ありません)になるのか分かりませんが、解決策や詳細については、この回答を更新します。 – VoodooChild

+0

私は椅子とモニターの間に問題があることを発見しました。私はブレークポイントが設定された行を実行するためにF10を押す必要があることを知らなかったので、決して実行されませんでした。もちろんそれはヌルでした。申し訳ありません。 :-) – Jason

関連する問題