将DataTable绑定到ComboBox,返回所选项目的主键WPF c#

本文关键字:项目 WPF 选项 绑定 DataTable ComboBox 返回 | 更新日期: 2023-09-27 17:57:26

这似乎是一个非常简单的问题,但我无法理解(我是XAML的新手)。我通过将comboBox绑定到数据表来填充它。我的表中的主键是S_ID,我需要为SelectionChanged事件中选择的项检索此值,这样我就可以基于此值加载更多详细信息。我尝试过int I=cboSites.SelectedItem,但即使S_ID是int,也会出现类型不匹配的情况。如果我将I设置为type object,我可以在调试模式下在DatarRowView中查看该值,但无法以任何其他方式访问数据。请让我知道我做错了什么。我做了很多研究,从我读到的代码来看还可以,但显然不是!顺便说一下,组合框中填充的数据绝对不错。非常感谢。

C#

try
{
     SqlDataAdapter sqlAd = new SqlDataAdapter();
     SqlCommand sqlComm = new SqlCommand("SP_SelectAllSiteNamesForCust", sqlConn);
     sqlComm.CommandType = System.Data.CommandType.StoredProcedure;
     DataSet dSet = new DataSet();
     sqlAd.SelectCommand = sqlComm;
     sqlAd.Fill(dSet);
     DataTable sitesTable = dSet.Tables[0];
     cboSites.ItemsSource = sitesTable.DefaultView;
 } 

XAML

 <ComboBox Height="28" IsEditable="True" Margin="630,15,28,10" 
           Name="cboSites" TabIndex="6" 
           ItemsSource="{Binding}" 
           DisplayMemberPath="S_Name" 
           SelectedItem="{Binding Path=S_ID}"  
           SelectionChanged="cboSites_SelectionChanged" /> 

SQL存储过程

SELECT 
[S_ID],
[S_Name]
FROM
[dbo].[tbl_Site]
WHERE [C_ID] = @CUSTID       

将DataTable绑定到ComboBox,返回所选项目的主键WPF c#

使用SelectedValue而不是SelectedItem:

<ComboBox ItemsSource="{Binding}" DisplayMemberPath="S_Name" 
          SelectedValuePath="S_ID" SelectedValue="{Binding Path=Int_Property_In_The_ViewModel}"/>

您得到的类型不匹配,因为集合中的每个项都像绑定到的DataView中的表中的一行。因此,在您的cboSites_SelectionChanged中,您可以得到S_ID,如下所示:

var s_id = int.Parse(((DataRowView)cboSites.SelectedItem)["S_ID"].ToString());

这里要将cboxSites.SelectedItem强制转换为DataRowView类型,然后使用索引器获取S_ID值。然后,您只需将该值转换为字符串,并将其解析为整数变量。