[英]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.