更好的方法是將您的列表綁定到您創建的對象。這樣你可以爲DisplayMemberPath(你看到的)和SelectedValuePath(你的程序的內部值)指定屬性。
這是您的主要XAML代碼。注意,按鈕的點擊方法將顯示ComboBox的當前選定值。這會在以後讓事情變得簡單。希望這不是矯枉過正,但它顯示了一些使WPF容易的原則。
namespace WPFListBoxSample {
public partial class Window1 : Window
{
WPFListBoxModel model = new WPFListBoxModel();
public Window1()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Window1_Loaded);
}
void Window1_Loaded(object sender, RoutedEventArgs e)
{
GetData();
this.DataContext = model;
}
public void GetData()
{
//SqlConnection myConnection = new SqlConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "ProgramsList.sdf");
SqlConnectionStringBuilder str = new SqlConnectionStringBuilder();
str.DataSource="192.168.1.27";
str.InitialCatalog="NorthWnd";
str.UserID="sa";
str.Password="xyz";
SqlConnection myConnection = new SqlConnection(str.ConnectionString);
SqlDataReader myReader = null;
myConnection.Open();
SqlDataReader dr = new SqlCommand("SELECT CategoryId, CategoryName FROM Categories ORDER BY CategoryName DESC", myConnection).ExecuteReader();
while (dr.Read())
{
model.Categories.Add(new Category { Id = dr.GetInt32(0), CategoryName = dr.GetString(1) });
}
myConnection.Close();
}
private void myButton_Click(object sender, RoutedEventArgs e)
{
if (this.myCombo.SelectedValue != null)
MessageBox.Show("You selected product: " + this.myCombo.SelectedValue);
else
MessageBox.Show("No product selected");
}
}
}
的XAML
<Grid>
<StackPanel>
<ComboBox x:Name="myCombo" ItemsSource="{Binding Categories}" DisplayMemberPath="CategoryName" SelectedValuePath="Id" />
<Button x:Name="myButton" Content="Show Product" Click="myButton_Click"/>
</StackPanel>
</Grid>
自己的對象來表示一個類別
namespace WPFListBoxSample
{
public class Category
{
public int Id { get; set; }
public string CategoryName { get; set; }
}
}
請注意{get;設置;}
最後一點點粘合劑使得很多事情變得簡單,把所有的數據放在模型中並綁定到模型上。這是WPF的工作方式。
using System.Collections.Generic;
namespace WPFListBoxSample
{
public class WPFListBoxModel
{
private IList<Category> _categories;
public IList<Category> Categories
{
get
{
if (_categories == null)
_categories = new List<Category>();
return _categories; }
set { _categories = value; }
}
}
}
我終於找到了答案,和男孩,是我笨!我在我的後臺代碼中使用SQL Server,這是一個聯網客戶端 - 服務器應用程序的框架,當時我應該使用SQL Compact Edition作爲本地桌面程序!我沒有意識到的是MDF適用於SQL Server,SDF適用於MDF。無論如何,我將Nate和Stratton的代碼結合起來,並將它們修改爲與SQL CE一起使用。感謝大家的幫助! – 2010-08-25 03:23:58
在這裏,如果你需要加載字符串值意味着你需要把'dr.GetString(1)'。要麼你需要加載int值意味着你需要把'dr.GetInt32(0)'。它爲我工作。 [Check Here !!](https://stackoverflow.com/questions/38032750/error-unable-to-cast-object-of-type-system-int32-to-type-system-string/44644672#44644672) – User6667769 2017-06-20 10:32:03