0

我在 SQL Server 中有一个名为Charges的数据库表,它具有三列(ChargeName、Charge、Type)。这是下面填充表的快照:

快照

我正在使用扩展 WPF 工具包的CheckComboBox控件。我想从下拉列表中打印选定的项目。

这是我的 XAML 代码文件

<Window x:Class="RTS_Management.TestScreen"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
    Title="TestScreen" Height="300" Width="300">
<Grid>
    <StackPanel Orientation="Vertical">
        <StackPanel Orientation="Horizontal">
            <TextBlock Margin="5">Purpose: </TextBlock>
            <xctk:CheckComboBox x:Name="_combo" 
                         HorizontalAlignment="Center" 
                         VerticalAlignment="Center" 
                         DisplayMemberPath="ChargeName"
                         ValueMemberPath="ChargeName"

                          />
            <Button Name="display" 
                    Click="display_Click"
                    Margin="5">
                Display Selected
            </Button>
        </StackPanel>

    </StackPanel>
</Grid>

这是文件背后的代码

using MessageBox = System.Windows.MessageBox;

namespace RTS_Management
{
    /// <summary>
    /// Interaction logic for TestScreen.xaml
    /// </summary>
    public partial class TestScreen : Window
    {
        bool handle = true;
        public TestScreen()
        {
            InitializeComponent();
            BindTreatmentComboBox(_combo);
        }

        // displaying data in ComboBox
        public void BindTreatmentComboBox(CheckComboBox comboBoxName)
        {
            string ConString = ConfigurationManager.ConnectionStrings["RTS_ManagementModel"].ConnectionString;
            string CmdString = string.Empty;
            SqlConnection conn = new SqlConnection(ConString);
            try
            {
                conn.Open();
                CmdString = "SELECT ChargeName "
                    + "FROM Charges ";
                SqlDataAdapter da = new SqlDataAdapter(CmdString, conn);
                DataSet ds = new DataSet();
                da.Fill(ds, "Charges");
                comboBoxName.ItemsSource = ds.Tables["Charges"].DefaultView;
                //comboBoxName.ItemsSource = ds;

            }
            catch (Exception ex)
            {

                Xceed.Wpf.Toolkit.MessageBox msg = new Xceed.Wpf.Toolkit.MessageBox();
                msg.ShowMessageBox(ex.Message.ToString());
            }
            finally
            {
                conn.Close();
            }
        }

        private void display_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(_combo.SelectedValue.ToString());
        }
    }
}

我错过了什么?伙计们帮助我,我不擅长 WPF。

4

2 回答 2

0

通过在代码隐藏中将数据集转换为字典,我可以看到所选值是弹出消息框,其中包含以下代码更新:

xml:

...
<xctk:CheckComboBox x:Name="_combo" 
            HorizontalAlignment="Center" 
            VerticalAlignment="Center" 
            DisplayMemberPath="Key"
            ValueMemberPath="Value"
            ItemsSource="{Binding}"
            />
...

代码背后:

...
comboBoxName.ItemsSource = ds.Tables["Charges"]
                             .AsEnumerable()
                             .ToDictionary<DataRow, string, string>(
                                r => r[0].ToString(), // Key
                                r => r[0].ToString()  // Value
                              );
...
于 2016-09-06T22:32:57.660 回答
0

你的Id表中有列吗?如果您的回答是肯定的,那么请尝试以下操作:

public void BindTreatmentComboBox(CheckComboBox comboBoxName)
{
    ...
    try
    {
        conn.Open();
        CmdString = "SELECT Id, ChargeName FROM Charges";
        SqlDataAdapter da = new SqlDataAdapter(CmdString, conn);
        DataSet ds = new DataSet();
        da.Fill(ds, "Charges");

        var data = ds.Tables["Charges"].DefaultView;

        comboBoxName.DisplayMemberPath = "ChargeName"
        comboBoxName.ValueMemberPath = "Id"
        comboBoxName.ItemsSource = data;    
    }
    ...
}

xml:

<xctk:CheckComboBox x:Name="_combo" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Center"/>

break point在这一行也放一个:

        comboBoxName.DisplayMemberPath = "ChargeName"

并检查data变量的值。您的表格记录应该在其中。

另一方面,我建议您在项目中遵循MVVM模式。

于 2016-09-06T22:47:48.297 回答