2016-09-06 102 views
0

我有一个名为数据库表三列(ChargeName,充电,型号)收费在SQL Server中。 这里是低于填充表格的快照:CheckComboBox WPF扩展工具包

Snapshot

我使用扩展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。

回答

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 
          ); 
... 
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模式。

相关问题