【发布时间】:2019-09-01 10:11:01
【问题描述】:
我在 Winform 上有一个列表框,该列表框绑定到具有 5 个字段的数据源。 ID, 数据库, 架构, 桌子, 安全组
列表框DisplayMember为Table,ValueMember为ID
根据列表框中的选择,我想将 Dbase 和 Schema 返回到变量。 谁能告诉我这是如何实现的?
Table = Tbl_List.GetItemText(Tbl_List.SelectedItem);
Dbase = Tbl_List.GetItemText(Tbl_List.SelectedItem);
Schema = Tbl_List.GetItemText(Tbl_List.SelectedItem);
非常感谢, 戴夫
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data;
using System;
using System.Data.SqlClient;
namespace Reference_Table_Updater
{
public partial class FrmMain : Form
{
DataTable dt;
String ComboString;
String Dbase;
String Schema;
String strConnection = "server=uk;" +
"Database='Scratchpad';" +
"Integrated Security=SSPI";
public FrmMain()
{
InitializeComponent();
this.Load += Form1_Load;
}
//public class DataSource_Items
//{
// public Int16 Key { get; set;}
// public String Table { get; set; }
// public String Schema { get; set; }
// public String Dbase { get; set; }
//}
public void BindGridView(string field)
{
dt = new DataTable();
SqlConnection connection = new SqlConnection(strConnection);
try
{
connection.Open();
ComboString = Tbl_List.GetItemText(Tbl_List.SelectedItem);
Schema = ((FrmMain)Tbl_List.SelectedItem).Schema;
Dbase = ((FrmMain)Tbl_List.SelectedItem).Dbase;
MessageBox.Show(Dbase + "." + Schema + "." + ComboString);
string sqlStatement = "Select * from " + ComboString;
SqlCommand sqlCmd = new SqlCommand(sqlStatement, connection);
sqlCmd.Parameters.AddWithValue("@Value1", field);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlDa.Fill(dt);
if (dt.Rows.Count > 0)
{
dataGridView1.DataSource = dt;
}
else
{
// NO RECORDS FOUND
}
}
catch (System.Data.SqlClient.SqlException ex)
{
string msg = "Fetch Error:";
msg += ex.Message;
throw new Exception(msg);
}
finally
{
connection.Close();
}
}
private void Form1_Load(object sender, EventArgs e)
{
this.updateable_TablesTableAdapter.Fill(this.scratchpadDataSet.Updateable_Tables);
BindGridView(Tbl_List.GetItemText(Tbl_List.SelectedItem));
}
private void Tbl_List_SelectedIndexChanged(object sender, EventArgs e)
{
if (Tbl_List.SelectedValue != null)
{
BindGridView(Tbl_List.GetItemText(Tbl_List.SelectedItem));
}
}
private void BtnUpdate_Click(object sender, EventArgs e)
{
dt.AcceptChanges();
//PASS INSERT/UPDATE/DELETES TO SQL SERVER HERE Passing datatable to a stored procedure if possible -
//I like the TVP option
https://stackoverflow.com/questions/12320594/passing-datatable-to-a-stored-procedure
BindGridView(Tbl_List.GetItemText(Tbl_List.SelectedItem));
}
private void button1_Click(object sender, EventArgs e)
{
FrmAbout F2 = new FrmAbout();
F2.ShowDialog();
}
}
}
【问题讨论】:
-
Dbase = ((YourClass)Tbl_List.SelectedItem).Dbase;? -
好吧,这是有道理的,但对 C# 如此陌生,我感到很困惑。我没有数据源的类,因为它没有以编程方式定义。我添加了上面的代码,看看是否有意义。
-
您的代码中没有任何内容显示您如何设置
Tbl_List的 DataSource。 -
它在 Tbl_List 属性窗口的数据绑定部分中设置。
标签: c#