附加SQL数据库到ComboBox.ItemSource (WPF)

本文关键字:WPF ItemSource ComboBox SQL 数据库 附加 | 更新日期: 2023-09-27 18:12:23

我想知道如何将SQL Server数据库分配给ComboBox(在WPF应用程序中)的ItemSource属性。我将数据源分配给项目,但不知道如何分配给属性。

附加SQL数据库到ComboBox.ItemSource (WPF)

你可以这样尝试。您可以像下面这样绑定组合框的项源属性。

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。

  1. connectionString -连接到DB的连接字符串的名称。如果你想在另一个类中设置它,然后调用参考,你可以修改相应的代码。
  2. combobox -要填充的combobox名称

  3. query -查询从数据库中获取数据

  4. defaultValue -要设置为comboBox的默认值

  5. itemText—这是您想要在列表框中显示的数据。这是数据库列的名称,在SELECT查询中

  6. 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();                
        }            
    }