使用SQL DB表创建下拉菜单C#
我需要你帮我做一些事情 这很简单,但一直困扰着我 我正在WPF应用程序中创建一个组合框[下拉菜单],我想用数据库中的所有当前表填充它 这就是我正在努力做到的: 当我单击组合框时,它将显示数据库中所有可用的表。然后,当我单击其中一个时,它将显示我放置在菜单下方的DataGrid中所选表中包含的信息 下面是我在组合框打开时使用的代码:使用SQL DB表创建下拉菜单C#,c#,sql,wpf,combobox,datagrid,C#,Sql,Wpf,Combobox,Datagrid,我需要你帮我做一些事情 这很简单,但一直困扰着我 我正在WPF应用程序中创建一个组合框[下拉菜单],我想用数据库中的所有当前表填充它 这就是我正在努力做到的: 当我单击组合框时,它将显示数据库中所有可用的表。然后,当我单击其中一个时,它将显示我放置在菜单下方的DataGrid中所选表中包含的信息 下面是我在组合框打开时使用的代码: private void tableComboBox_DropDownOpened(object sender, EventArgs e) {
private void tableComboBox_DropDownOpened(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';", db.connection);
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
foreach(DataRow row in dataSet.Tables)
{
tableComboBox.Items.Add(row);
}
}
我已经看过并尝试过一些不同的方法,但没有一种有效。
我试图在DataGrid中显示一个表的内容,但我又被卡住了
请各位编码员。帮帮这个菜鸟!:) 这就是我很快想到的
public partial class MainWindow : Window
{
SqlConnection db = new SqlConnection("Your Connection String Here");
public MainWindow()
{
InitializeComponent();
loadCombo();
}
private void loadCombo()
{
SqlCommand cmd = new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';", db);
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
foreach (DataRow row in dataSet.Tables[0].Rows)
{
comboBox.Items.Add(row[0]);
}
}
private DataTable loadDataGrid(String inTableName )
{
SqlCommand cmd = new SqlCommand("SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '"+ inTableName + "';", db);
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
return dataSet.Tables[0];
}
private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string text = e.AddedItems[0].ToString(); ;
dataGrid.ItemsSource = loadDataGrid(text).DefaultView;
}
}
希望这有帮助
我已经在下面更新了你的代码。把这个贴在一张纸上,试一试。我不确定创建按钮发生了什么,但让我们看看是否可以修复combobox和datagrid。我在代码中添加了一些注释来帮助解释我的rational
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace DatabaseManagement
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Database db = new Database();
public MainWindow()
{
InitializeComponent();
// Add the loadCombo back
loadCombo();
// comment this out until you get the desired functionality
//TableCreateGrid.Visibility = Visibility.Hidden;
}
private void createButton_Click(object sender, RoutedEventArgs e)
{
try
{
// I am not sure what you are doing here -
if (string.IsNullOrEmpty(column3TextBox.Text) && string.IsNullOrEmpty(column4TextBox.Text))
{
db.CreateTable(tableTextBox.Text, column1TextBox.Text, column2TextBox.Text);
informationBlock.Text = db.infoBoxString;
}
else if (string.IsNullOrEmpty(column4TextBox.Text))
{
db.CreateTable(tableTextBox.Text, column1TextBox.Text, column2TextBox.Text, column3TextBox.Text);
informationBlock.Text = db.infoBoxString;
}
else if (!string.IsNullOrEmpty(column3TextBox.Text) && !string.IsNullOrEmpty(column4TextBox.Text))
{
db.CreateTable(tableTextBox.Text, column1TextBox.Text, column2TextBox.Text, column3TextBox.Text, column4TextBox.Text);
informationBlock.Text = db.infoBoxString;
}
}
catch (Exception ex)
{
informationBlock.Text = ex.Message;
}
}
private void button_Click(object sender, RoutedEventArgs e)
{
db.Connect();
informationBlock.Text = db.infoBoxString;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
db.Close();
informationBlock.Text = db.infoBoxString;
}
private void loadCombo()
{
SqlCommand cmd = new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';", db.connection);
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
foreach (DataRow row in dataSet.Tables[0].Rows)
{
tableComboBox.Items.Add(row[0]);
}
}
private DataTable loadDataGrid(String inTableName)
{
// Here you need to specify the columns you want in the TableCreateGrid
// example this just will show the COLUMN NAME,DATA TYPE, CHARACTER MAXIMUM LENGTH and so on
// SqlCommand cmd = new SqlCommand("SELECT COLUMN_NAME,DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, TABLE_SCHEMA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + inTableName + "';", db.connection);
SqlCommand cmd = new SqlCommand("SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + inTableName + "';", db.connection);
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
return dataSet.Tables[0];
}
private void tableComboBox_DropDownOpened(object sender, EventArgs e)
{
//loadCombo();
// dont need since this is loaded on Initialize
}
private void tableComboBox_DropDownClosed(object sender, EventArgs e)
{
// tableComboBox.Items.Clear();
// dont need since this will clear all the items in the tableComboBox
}
private void tableComboBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
try
{
string text = e.AddedItems[0].ToString(); ;
dataGrid.ItemsSource = loadDataGrid(e.AddedItems[0].ToString()).DefaultView;
}
catch (Exception ex)
{
informationBlock.Text = ex.Message;
}
}
}
}
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用系统数据;
使用System.Data.SqlClient;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
命名空间数据库管理
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
数据库db=新数据库();
公共主窗口()
{
初始化组件();
//将loadCombo添加回
loadCombo();
//将其注释掉,直到获得所需的功能
//TableCreateGrid.Visibility=Visibility.Hidden;
}
私有void createButton_单击(对象发送者,路由目标e)
{
尝试
{
//我不知道你在这里干什么-
if(string.IsNullOrEmpty(column3TextBox.Text)和&string.IsNullOrEmpty(column4TextBox.Text))
{
CreateTable(tableTextBox.Text,column1TextBox.Text,column2TextBox.Text);
informationBlock.Text=db.infoBoxString;
}
else if(string.IsNullOrEmpty(column4TextBox.Text))
{
CreateTable(tableTextBox.Text,column1TextBox.Text,column2TextBox.Text,column3TextBox.Text);
informationBlock.Text=db.infoBoxString;
}
如果(!string.IsNullOrEmpty(column3TextBox.Text)和&!string.IsNullOrEmpty(column4TextBox.Text))
{
CreateTable(tableTextBox.Text,column1TextBox.Text,column2TextBox.Text,column3TextBox.Text,column4TextBox.Text);
informationBlock.Text=db.infoBoxString;
}
}
捕获(例外情况除外)
{
informationBlock.Text=例如消息;
}
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
db.Connect();
informationBlock.Text=db.infoBoxString;
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
db.Close();
informationBlock.Text=db.infoBoxString;
}
私有void loadCombo()
{
SqlCommand cmd=new SqlCommand(“从信息_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';”,db.connection中选择TABLE_NAME);
SqlDataAdapter dataAdapter=新的SqlDataAdapter(cmd);
数据集=新数据集();
dataAdapter.Fill(数据集);
foreach(数据集中的DataRow行。表[0]。行)
{
tableComboBox.Items.Add(第[0]行);
}
}
私有数据表loadDataGrid(字符串inTableName)
{
//在这里,您需要在TableCreateGrid中指定所需的列
//这个示例将显示列名、数据类型、字符最大长度等
//SqlCommand cmd=new SqlCommand(“选择列名称、数据类型、字符最大长度、表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格表格;
SqlCommand cmd=newsqlcommand(“从信息_SCHEMA.COLUMNS中选择列_NAME,*,其中表_NAME='”+inTableName+“;”,db.connection);
SqlDataAdapter dataAdapter=新的SqlDataAdapter(cmd);
数据集=新数据集();
dataAdapter.Fill(数据集);
返回dataSet.Tables[0];
}
private void tableComboBox_DropDownOpen(对象发送方,事件参数e)
{
//loadCombo();
//不需要,因为这是在初始化时加载的
}
私有void tableComboBox\u DropDownClosed(对象发送方,事件参数e)
{
//tableComboBox.Items.Clear();
//不需要,因为这将清除tableComboBox中的所有项目
}
private void tableComboBox_SelectionChanged_1(对象发送者,SelectionChangedEventArgs e)
{
尝试
{
字符串text=e.AddedItems[0].ToString();
dataGrid.ItemsSource=loadDataGrid(e.AddedItems[0].ToString()).DefaultView;
}
捕获(例外情况除外)
{
informationBlock.Text=例如消息;
}
}
}
}
这是在combobox中存储显示名称和值的代码
private void Form1\u加载(对象发送方,事件参数e)
{
var Header=newbindingList();
List LV=ListHeader();
foreach(LV中的var列表)
{
private void Form1_Load(object sender, EventArgs e)
{
var Header = new BindingList<KeyValuePair<string, string>>();
List<string> LV = ListHeader();
foreach (var listOut in LV)
{
Header.Add(new KeyValuePair<string, string>(listOut, "val"+listOut));
}
tableComboBox.DataSource = Header;
tableComboBox.DisplayMember = "Key";
tableComboBox.ValueMember = "Value";
}
public List<string> ListHeader()
{
List<string> list = new List<String>();
try
{
cmd.Connection = db.connection;
cmd.CommandText = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';";
var reader = cmd.ExecuteReader();
for(int i=0;i<reader.FieldCount;i++)
{
list.Add(reader.GetName(i));
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Get Header",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
con.Close();
}
return list;
}