Sql server 当数据来自SQL Server(WPF)时,如何检索选定的ListView值

Sql server 当数据来自SQL Server(WPF)时,如何检索选定的ListView值,sql-server,wpf,listview,selected,Sql Server,Wpf,Listview,Selected,我是C和WPF的新手,希望这是一个简单的问题 我有一个从SQLServer表检索数据的listview <ListView Width="450" Margin="10" Grid.Row="1" ItemsSource="{Binding Path=Table}" Name="FIData" SelectionChanged="FIData_SelectionChanged"> <ListView.View> <GridView&g

我是C和WPF的新手,希望这是一个简单的问题

我有一个从SQLServer表检索数据的listview

<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或其他源填充数据。我想我的问题之一可能是我对对象的理解不太正确,但我希望有人能告诉我如何从所选列表中获取特定值。我想稍后使用其中一个值

谢谢

Jason

在这里,当您这样做时:

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

它将实际数据表映射为虚拟属性,虚拟属性可用于像您这样的数据绑定场景

但要回答您关于如何检索数据值的问题,我认为您已经非常接近了,因为您已经为listview设置了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,并查看它包含哪些数据。

在这里,当您执行以下操作时:

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

它将实际数据表映射为虚拟属性,虚拟属性可用于像您这样的数据绑定场景

但要回答您关于如何检索数据值的问题,我认为您已经非常接近了,因为您已经为listview设置了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,并查看它包含哪些数据。

谢谢,但是当我这样做时,selectedItem返回的值为null。@杰森:我不知道为什么会为null抱歉-但是如果我遇到解决方案或更多细节,我会更新这个答案。我发现问题出在椅子和显示器之间。我没有意识到我必须按F10来执行断点所在的行,所以它从未执行过。当然是空的。。对不起-谢谢,但当我这样做时,selectedItem返回的值为null。@Jason:我不确定为什么会为null抱歉-但是如果我遇到解决方案或更多细节,我会更新此答案。我发现问题出在椅子和显示器之间。我没有意识到我必须按F10来执行断点所在的行,所以它从未执行过。当然是空的。。对不起-