Присоедините базу данных SQL к ComboBox.ItemSource (WPF). - PullRequest
0 голосов
/ 23 октября 2011

Я хочу знать , как я могу назначить базу данных SQL Server для свойства ItemSource ComboBox (в приложении WPF).Я назначил источник данных проекту, но не знаю, как назначить это свойство.

С уважением

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

вы можете попробовать вот так .. вы можете привязать свойство источника элемента в выпадающем списке, как показано ниже ..

ItemsSource = "{Binding}"

EDIT:

Строка подключения:

Вы можете добавить управляющее событие или класс, но это должно быть в окне приложения wpf.

Если вы создаете новое приложение в Visual Studio или Visual C # или что-то еще, что создает Window1.xaml. вам нужно добавить строку подключения в основном в классе или событии в этом window1.xaml, а не в 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>

в функции загрузки вы можете назначить значения в комбинированный список

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

}
0 голосов
/ 04 марта 2015

Если кто-то еще приземлится здесь (как я сделал), вот улучшенная версия кода Pratap K. Просто передайте 6 параметров этому методу, и он заполнит ваш comboBox.

  1. connectionString - имя строки подключения для подключения к БД. Если вы предпочитаете установить его в другом классе и просто позвонить ссылка, вы можете изменить код соответственно.
  2. выпадающий список - имя поля со списком, который вы хотите заполнить

  3. query - Вы запрашиваете выборку данных из базы данных

  4. defaultValue - значение по умолчанию, которое вы хотите установить в comboBox

  5. itemText - это данные, которые вы хотите отобразить в списке. Это имя столбца БД, которое содержится в вашем запросе SELECT.

  6. itemValue - это значение, которое вы хотите связать с элементами в выпадающем списке. Это также столбец в вашем запросе SELECT и имя столбца в вашей базе данных. (Если вам это не нужно, удалите его из кода и параметра тоже.

Кроме того, вы можете передать их значениям (DisplayMemberPath и SelectedValuePath) в коде XAML.

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

Спасибо, Пратап К. :)

...