Я делаю приложение базы данных wpf и хочу выбрать таблицу из своей базы данных с помощью поля со списком.
У меня есть база данных с десятью таблицами. Я могу подключиться к базе данных и выбрать/обновить/вставить... элементы из таблицы. Мне нужно переключаться между столами. Например, если я нажму на Table1, будет выбрана Table1, если я нажму на Table2, будет выбрана Table2. Я считаю, что Combobox хорош для моего приложения. Это мой код для выбора:
public MainWindow()
{
InitializeComponent();
loadData();
}
public void loadData()
{
// vytvoření spojení
MySqlConnection con = new MySqlConnection(spojeni);
con.Open();
MySqlCommand vybrat = con.CreateCommand();
vybrat.CommandText = "SELECT * FROM barva";
MySqlDataAdapter adapt = new MySqlDataAdapter(vybrat);
DataSet data = new DataSet();
adapt.Fill(data);
dtGrid.ItemsSource = data.Tables[0].DefaultView;
}
PS. Прошу прощения за мой английский
Я знаю, что должен сделать что-то подобное, но я не знаю, как. Я очень плохой программист. Это мой список со списком: <ComboBox x:Name = "CbTabulky" > <ComboBoxItem Name = "cbi">консоли</ComboBoxItem> <ComboBoxItem Name = "cbi2">выбор</ComboBoxItem> <ComboBoxItem Name = "cbi3">платформа </ComboBoxItem> </ComboBox>
Вот пример того, как привязать поле со списком к списку: stackoverflow.com/questions/21898022/…
Я читал примеры, но я все еще не понимаю. Если я пришлю вам ссылку на мой проект, вы можете мне объяснить, пожалуйста?
Я думаю, вы ищете что-то вроде этого (строка подключения относится к конфигурации в web.config):
<connectionStrings>
<add name = "YOUR CONNECTION" connectionString = "Data Source= ;Initial Catalog= ; User ID= ;Password= ;" providerName = "System.Data.SqlClient" />
</connectionStrings>
//Connection to Web.config connectionStrings
DataTable database = new DataTable();
string dbString = ConfigurationManager.ConnectionStrings["YOUR CONNECTION"].ConnectionString;
using (SqlConnection con = new SqlConnection(dbString))
{
try
{
//SQL query
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM sys.tables", con);
adapter.Fill(database);
//Populate ddlTable DropDownList
ddlTable.DataSource = database;
ddlTable.DataTextField = "name";
ddlTable.DataValueField = "name";
ddlTable.DataBind();
ddlTable.Items.Insert(0, new ListItem("-- Select Table --", "0"));
}
catch (Exception)
{
}
}
Вот действительно простой пример привязки поля со списком к списку строк и использования выбранной строки при нажатии кнопки.
Это файл кода программной части C#:
using System.Collections.Generic;
using System.Windows;
namespace WpfCombobox
{
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
}
public string MySimpleStringProperty { get; set; }
public List<string> MyListProperty { get; set; } = new List<string>() { "one", "two", "three" };
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
MessageBox.Show($"Item is {this.MySimpleStringProperty}");
}
}
}
Очевидно, что вместо того, чтобы просто отображать выбранный элемент в окне сообщения, вы должны использовать его в своем SQL.
А вот WPF:
<Window x:Class = "WpfCombobox.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local = "clr-namespace:WpfCombobox"
mc:Ignorable = "d"
DataContext = "{Binding RelativeSource = {RelativeSource Self}}"
Title = "MainWindow" Height = "350" Width = "525">
<StackPanel>
<ComboBox ItemsSource = "{Binding MyListProperty}"
SelectedItem = "{Binding MySimpleStringProperty}"
IsSynchronizedWithCurrentItem = "True"
Text = "Select Option"
Margin = "5"/>
<Button Click = "ButtonBase_OnClick" Content = "Click Me!" Margin = "5" />
</StackPanel>
</Window>
Обратите внимание, что в поле со списком есть ItemSource
, связанный со списком строк one, two, three
, и SelectedItem
, который меняется, когда пользователь выбирает элемент.
О, я вижу. Спасибо, я попробую.
Это отлично работает, спасибо. У меня последний вопрос: как я могу создать динамический TextBox? Я что-то пробовал, но это не сработало правильно.
Что вы подразумеваете под «динамическим»? Вы хотите создать элемент управления во время выполнения, а не кодировать его в XAML? Этот пример может помочь: stackoverflow.com/questions/12468658/… В противном случае вам следует задать новый вопрос.
Да, я имею в виду что-то вроде этого, но у меня это не работает. Попробую задать новый вопрос. Еще раз спасибо за вашу помощь.
Создайте общедоступный список имен таблиц в C# и другую общедоступную строку для выбранного элемента, привяжите к ним поле со списком и используйте его в SQL.