我在SQL Server中有一个名为费用的数据库表 三列(ChargeName,Charge,Type)。 以下是填充表格的快照:
我正在使用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。
答案 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模式。