【问题标题】:How to get different member of a datasource from Listbox.SelectedItem如何从 Listbox.SelectedItem 获取数据源的不同成员
【发布时间】: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#


【解决方案1】:

好的,所以我最终想通了:

声明:

 DataRowView d1;
 String Dbase;
 String Schema;

设置:

d1 = Tbl_List.SelectedItem as DataRowView;

设置:

Dbase = d1["Database"].ToString();
Schema = d1["Schema"].ToString();

将 Dbase 和 Schema 打到表单上的两个临时文本框中,以证明它有效:

this.TBDbase.Text = Dbase;
this.TBSchema.Text = Schema;

大家好, 戴夫

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    相关资源
    最近更新 更多