附加SQL数据库到ComboBox.ItemSource (WPF)
本文关键字:WPF ItemSource ComboBox SQL 数据库 附加 | 更新日期: 2023-09-27 18:12:23
我想知道如何将SQL Server数据库分配给ComboBox(在WPF应用程序中)的ItemSource属性。我将数据源分配给项目,但不知道如何分配给属性。
你可以这样尝试。您可以像下面这样绑定组合框的项源属性。
编辑:ItemsSource = "{绑定}"
连接字符串
您可以添加控件事件或类,但必须在wpf应用程序窗口中。
如果你在visual studio或visual c#中创建新应用程序,它会创建window1.xaml。你需要在class1或事件中添加连接字符串。app.config或app.xaml.
连接字符串在类中定义:
下面是一个例子,通过创建一个类(它的sql连接器,而不是我在第一个显示的OleDb):
public class ConnectionHelper
{
public static SqlConnection GetConnection()
{
string connectionStr = "Data Source=MICROSOFT-JIGUO;Initial Catalog=CompanyTestDB;Integrated Security=True";
SqlConnection conn = new SqlConnection(connectionStr);
return conn;
}
}
你可以在你的方法中使用这个类:
SqlConnection conn = ConnectionHelper.GetConnection();
<Window
.......
Loaded="OnLoad"
>
<Grid>
<ComboBox Height="18" SelectionChanged="cmbCategory_SelectionChanged"
ItemsSource="{Binding}"
HorizontalAlignment="Right" Margin="0,92,17,0" Name="cmbCategory"
VerticalAlignment="Top" Width="176"
BorderBrush="#FFFFFFFF" SelectedIndex="0"/>
</Grid>
</Window>
on load function你可以给combobox赋值
private void OnLoad(object sender, System.EventArgs e)
{
ListCategories();
}
private void ListCategories()
{
sqlCon = new SqlConnection();
sqlCon.ConnectionString = Common.GetConnectionString();
cmd = new SqlCommand();
cmd.Connection = sqlCon;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM Categories";
sqlDa = new SqlDataAdapter();
sqlDa.SelectCommand = cmd;
ds = new DataSet();
try
{
sqlDa.Fill(ds, "Category");
DataRow nRow = ds.Tables["Category"].NewRow();
nRow["CategoryName"] = "List All";
nRow["CategoryID"] = "0";
ds.Tables["Category"].Rows.InsertAt(nRow, 0);
//Binding the data to the combobox.
cmbCategory.DataContext = ds.Tables["Category"].DefaultView;
//To display category name (DisplayMember in Visual Studio 2005)
cmbCategory.DisplayMemberPath =
ds.Tables["Category"].Columns["CategoryName"].ToString();
//To store the ID as hidden (ValueMember in Visual Studio 2005)
cmbCategory.SelectedValuePath =
ds.Tables["Category"].Columns["CategoryID"].ToString();
}
catch (Exception ex)
{
MessageBox.Show("An error occurred while loading categories.");
}
finally
{
sqlDa.Dispose();
cmd.Dispose();
sqlCon.Dispose();
}
}
如果有人在这里着陆(像我一样),这里是pratap k代码的改进版本。只要传递6个参数给这个方法,它就会填充你的comboBox。
- connectionString -连接到DB的连接字符串的名称。如果你想在另一个类中设置它,然后调用参考,你可以修改相应的代码。
-
combobox -要填充的combobox名称
-
query -查询从数据库中获取数据
-
defaultValue -要设置为comboBox的默认值
-
itemText—这是您想要在列表框中显示的数据。这是数据库列的名称,在SELECT查询中
-
itemValue—这是您想要关联到组合框项的值。这也是SELECT查询中的一个列,并且是数据库中一个列的名称。(如果你不需要它,从代码和参数中删除它。
同样,您可以在XAML代码中传递这些值(DisplayMemberPath和SelectedValuePath)。
public bool fillComboBox(string connectionString, System.Windows.Controls.ComboBox combobox, string query, string defaultValue, string itemText, string itemValue)
{
SqlCommand sqlcmd = new SqlCommand();
SqlDataAdapter sqladp = new SqlDataAdapter();
DataSet ds = new DataSet();
try
{
using (SqlConnection _sqlconTeam = new SqlConnection(ConfigurationManager.ConnectionStrings[connectionString].ConnectionString))
{
sqlcmd.Connection = _sqlconTeam;
sqlcmd.CommandType = CommandType.Text;
sqlcmd.CommandText = query;
_sqlconTeam.Open();
sqladp.SelectCommand = sqlcmd;
sqladp.Fill(ds, "defaultTable");
DataRow nRow = ds.Tables["defaultTable"].NewRow();
nRow[itemText] = defaultValue;
nRow[itemValue] = "-1";
ds.Tables["defaultTable"].Rows.InsertAt(nRow, 0);
combobox.DataContext = ds.Tables["defaultTable"].DefaultView;
combobox.DisplayMemberPath = ds.Tables["defaultTable"].Columns[0].ToString();
combobox.SelectedValuePath = ds.Tables["defaultTable"].Columns[1].ToString();
}
return true;
}
catch (Exception expmsg)
{
return false;
}
finally
{
sqladp.Dispose();
sqlcmd.Dispose();
}
}