#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.
- ConnectionString — имя строки подключения для подключения к БД. Если вы предпочитаете настроить ее в другом классе и просто вызвать ссылку, вы можете соответствующим образом изменить код.
-
combobox — имя поля со списком, которое вы хотите заполнить
-
запрос — запрос для извлечения данных из базы данных
-
defaultValue — значение по умолчанию, которое вы хотите установить в ComboBox
-
itemText — это данные, которые вы хотите отобразить в списке. Это имя столбца базы данных и находится в вашем запросе SELECT.
-
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();
}
}
Спасибо пратапу К. 🙂