2016-05-31 7 views
0

私はこれでSQLクエリリストにLINQのからListViewを投入しています:SQLクエリにLINQのが移入されたリストビューから値を取得

private void loademployeelist() 
    { 
     dbml.hrdbDataContext listpeople = new dbml.hrdbDataContext(); 
     var q = from p in listpeople.EmpIDs 
       join pi in listpeople.EmpBasicFiles on p.EmpID1 equals pi.EBF_EmpID 
       where pi.EBF_Active == activeornot 
       orderby p.LastName 
       select new classes.Employeeselected() { FirstName = p.FirstName, LastName = p.LastName, empid=p.EmpID1}; 

     foreach (var item in q) 
     { 
      lb_active_employee_names.Items.Add(new { LastName = item.LastName, FirstName = item.FirstName, empid = item.empid }); 
     } 
    } 

問題は、私はちょうど、選択した値をしたいということですempidとなります。私はどこにでも見てきましたが、その価値を得る方法を見つけることができません。値を取得するコードは次のとおりです。

private void lb_active_employee_names_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     ListViewItem empsel = (ListViewItem)lb_active_employee_names.SelectedItem; 
     string test = empsel.GetType().ToString(); 
     MessageBox.Show(test); 
     } 

私が選択した後、プログラムを実行するとエラーが発生します。私はエラーを見てみましたが、私はこの広大な荒野に迷い込んでいます。私は何が起こっているのかを概念的に理解していると思いますが、それを修正する方法はわかりません。私はまだC#/ Visual Studioの新機能です。ここで

は誤りです: Additional information: Unable to cast object of type '<>f__AnonymousType103[System.String,System.String,System.Decimal]' to type 'System.Windows.Controls.ListViewItem'.

私のXAMLは、このようになります

An exception of type 'System.InvalidCastException' occurred in 6DegreesGateway.exe but was not handled in user code

 <ListView x:Name="lb_active_employee_names" HorizontalAlignment="Left" Height="135" Margin="10,148,0,0" VerticalAlignment="Top" Width="365" Grid.Column="1" Grid.Row="1" Loaded="listBox_Loaded" SelectionChanged="lb_active_employee_names_SelectionChanged" SelectedItem="{Binding Path=empid}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}" /> 
       <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}" /> 
       <GridViewColumn Header="Employee ID" DisplayMemberBinding="{Binding empid}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 

私はなどの結合またはクラスを作成し、他の人がやっていることを検討してみましたしかし、私はますます混乱しています。

+0

「私は選択した値をempidにしますか?」とはどういう意味ですか?あなたは「帝国」と何をしようとしていますか? –

+0

この類似の質問を見てください。私は答えが助けになると思います。 http://stackoverflow.com/questions/15091400/get-single-listview-selecteditem –

+0

@JasonBoyd別のテーブルのempidから別のクエリを実行します。 –

答えて

0

アイテムをリストボックスに追加するときに使用したコードは、タイプを匿名に変更しました。

foreach (var item in q) 
    { 
     lb_active_employee_names.Items.Add(new { LastName = item.LastName,  FirstName = item.FirstName, empid = item.empid }); 
    } 

は、その代わりに、私はこれにそれを変更:

 foreach (var item in q) 
     { 
      lb_active_employee_names.Items.Add(item); 
     } 

この方法では、EMPIDを含むリスト内の項目のすべてが自分のタイプを保持した(少なくともこれは私が起こっ考えるものです)。

 var empsel = (classes.Employeeselected)lb_active_employee_names.SelectedItem; 
     empIdSelected = empsel.empid; 

そして、私は他のテーブルの上にそのコードとのさらなるクエリを実行することができます。いずれにせよ、私はこのコード行を持つことから(EMPID)に必要なデータを取得することができます。

これはかなりではありません。私はこれを行うためのより良い方法があると確信しています。

関連する問題