繁体   English   中英

CheckComboBox WPF扩展工具包

[英]CheckComboBox WPF Extended Toolkit

我在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。

通过在后面的代码中将数据集转换为字典,我可以看到所选值是带有以下代码更新的弹出消息框:

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

您的表格中有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模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM