Присоедините базу данных SQL к ComboBox.ItemSource (WPF)

#c# #.net #wpf #windows

#c# #.net #wpf #Windows

Вопрос:

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

С наилучшими пожеланиями

Комментарии:

1. что вы хотите показать в combobox? Можете ли вы указать запрос, который вы хотите выполнить, и показать, как вы его выполняете прямо сейчас?

2. Я хочу показать содержимое строк столбца

Ответ №1:

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

ItemsSource=»{Привязка}»

Редактировать:

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

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

Если вы создаете новое приложение в Visual Studio или Visual c # или что-то еще, оно создает window1.xaml. вам нужно добавить строку подключения в основном в класс или событие в этом window1.xaml, а не в app.config или app.xaml.

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

Вот пример создания класса (его sql connector вместо OleDb, который я показал в 1-м):

 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>
  

при загрузке функции вы можете присваивать значения 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();
  }

}
  

Комментарии:

1. Привет, но как я могу установить и где находится база данных?

2. вы можете получить строку подключения и использовать эту строку подключения для получения сведений из базы данных …. база данных — это sql server …

3. Но где я пишу / устанавливаю строку подключения?

4. Здравствуйте; Я мог бы определить строку подключения, но проблема в том, что я получаю определенное сообщение об ошибке при загрузке категорий. В моем случае «Категория» была заменена из имени таблицы (из базы данных), а «CategoryName» и «CategoryID» — из имени столбцов. Как я могу это исправить?

5. Сообщение об ошибке выглядит следующим образом: «Произошла ошибка при загрузке категорий». (это не ошибка компиляции / отладки)

Ответ №2:

Если кто-то еще попадет сюда (как я), вот улучшенная версия кода pratap k. Просто передайте 6 параметров этому методу, и он заполнит ваш ComboBox.

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

  3. запрос — запрос для извлечения данных из базы данных

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

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

  6. itemValue — это значение, которое вы хотите связать с элементами combobox. Это также столбец в вашем запросе 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();                
        }            
    }
  

Спасибо пратапу К. 🙂