CheckComboBox WPF扩展工具包

时间:2016-09-06 21:26:52

标签: c# wpf xaml wpf-extended-toolkit

我在SQL Server中有一个名为费用数据库表 三列(ChargeName,Charge,Type)。 以下是填充表格的快照:

Snapshot

我正在使用Extended WPF Toolkit的 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。

2 个答案:

答案 0 :(得分:0)

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

XAML:

...
<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
                              );
...

答案 1 :(得分: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;    
    }
    ...
}

的Xaml:

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

还在此行添加break point

        comboBoxName.DisplayMemberPath = "ChargeName"

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

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

相关问题