【问题标题】:Binding DataTable to ComboBox, Returning Primary Key of Selected Item WPF c#将DataTable绑定到ComboBox,返回所选项目WPF c#的主键
【发布时间】:2013-02-04 18:11:49
【问题描述】:

这似乎是一个非常简单的问题,但我无法弄清楚(我是 XAML 的新手)。我通过将组合框绑定到数据表来填充它。我的表中的主键是 S_ID,我需要为在 SelectionChanged 事件中选择的项目检索此值,以便我可以根据此值加载更多详细信息。我尝试过 int i = cboSites.SelectedItem,但即使 S_ID 是 int,也会得到类型不匹配。如果我将 i 设置为类型对象,我可以在调试模式下查看 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       

【问题讨论】:

    标签: c# wpf data-binding wpf-controls


    【解决方案1】:

    使用 SelectedValue 代替 SelectedItem:

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

    【讨论】:

    • 感谢您的快速回复!我试过了,现在如果我使用以下代码进行调试 - var i = cboSitesForTurbine.SelectedValue - 在 SelectionChanged 我得到 i = null ...有什么想法吗?
    【解决方案2】:

    您遇到了类型不匹配,因为您的集合中的每个项目都类似于您绑定到的 DataView 中的表中的一行。因此,在您的 cboSites_SelectionChanged 中,您可以获得类似这样的 S_ID:

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

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

    【讨论】:

    • 太棒了,它的工作原理,非常感谢。我无法自己弄清楚如何投射那种类型!我认为 WPF 中绑定的想法是在 XAML 中做大​​部分事情并使事情变得更容易。为了获得该值,这似乎有点复杂!再次感谢。
    猜你喜欢
    • 2014-04-19
    • 1970-01-01
    • 2018-02-11
    • 2021-01-23
    • 2010-09-23
    • 2020-10-10
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    相关资源
    最近更新 更多