如何将数据表中的项目输入到文本框中

How to enter item from datatable into textbox

我的第一个 C# 表单应用程序。我可以用 POSH 编写它,但我正在努力毕业并理解 C#。我知道我还有很长的路要走,但如果有人能帮忙解释一下,我将不胜感激。

我有一个简单的 SQL table,其中包含以下内容:CLIENT、INPATH、OUTPATH、LIMITERS (PK) 限制器具有独特的价值 对于每个 CLIENT,INPATH 和 OUTPATH 都是相同的。 我正在尝试创建一个执行以下操作的表单:

显示具有不同 CLIENT -Working 的列表框

--- 其余不工作 ---

在列表框中单击:

用所选客户端的 INPATH 填充文本框

用所选客户端的 OUTPATH 填充文本框

为选定的客户端使用 LIMITERS 填充列表框

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Data.SqlClient;




namespace DSI_SFTP_FrontEnd
{
    public partial class ClientMain : Form
    {
        private SqlDbConnect con;
       

        public ClientMain()

        {
            InitializeComponent();
            con = new SqlDbConnect();
            con.SqlQuery("Select Distinct CLIENT from Client_Inf");
            clientListBoxValues.Items.Clear();
            foreach (DataRow dr in con.QueryEx().Rows)
            {
                clientListBoxValues.Items.Add(dr[0].ToString());
                
            }
            


        }

        private void clientListBoxValues_SelectedIndexChanged(object sender, EventArgs e)
        {
            string text = clientListBoxValues.GetItemText(clientListBoxValues.SelectedItem);
            if (text != null)


            {
                InitializeComponent();

                string sql = $"Select INPATH, OUTPATH, LIMITERS from Client_Inf where CLIENT = '{text}'";

                con = new SqlDbConnect();
                con.SqlQuery(sql);
                DataTable dataTable = con.QueryEx();

                {
                    inPathTextBoxValue.Text = dataTable.Rows[0]["INPATH"].ToString();
                    outPathTextBoxValue.Text = dataTable.Rows[0]["OUTPATH"].ToString();
                }
                foreach (DataRow dr in dataTable.Rows)
                {
                    limitersListBoxValues.Items.Add(dr[2].ToString());
                }

                
                
            }

        }

        private void createNewbutton_Click(object sender, EventArgs e)
        {
            NewClientForm frm = new NewClientForm();
            frm.ShowDialog();
        }

        private void cancelButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }


    }
}

SqlDbConnect.cs

using System.Data;

namespace DSI_SFTP_FrontEnd
{
    public class SqlDbConnect
    {
        private SqlConnection _con;
        public SqlCommand _cmd;
        private SqlDataAdapter _da;    
        private DataTable _dt;

        public SqlDbConnect()
        { 
        _con=new SqlConnection("Server=<SERVER>;Database=<DB>;Trusted_Connection=True;TrustServerCertificate=True;");   
            _con.Open();
        }

        public void SqlQuery(string queryText) 
        {
            _cmd= new SqlCommand(queryText, _con);
        }

        public DataTable QueryEx() 
        {
            _da = new SqlDataAdapter(_cmd);
            _dt= new DataTable();
            _da.Fill(_dt);
            return _dt;
        }


        public void NonQueryEx() 
        {
            _cmd.ExecuteNonQuery();
        }


    }
}

问题是您在 clientListBoxValues_SelectedIndexChanged 中调用 InitializeComponent()InitializeComponent() 创建控件,即 TextBoxes 和 ListBoxes 等。效果是每次 ListBox 的选定索引发生变化时,您都在创建另一组这些控件。

InitializeComponent() 必须在构造函数中调用一次 ClientMain() 而在其他任何地方都不能调用!