如何将数据表中的项目输入到文本框中
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()
而在其他任何地方都不能调用!
我的第一个 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()
而在其他任何地方都不能调用!