在加载事件中,我设法设置了txtITEM
的自动完成源。我试图在txtITEM中显示数据库中的数据。但我想根据{的值自动填充余下的TextBox
es:txtITEMCODE
,txtITEMNAME
,txtPRICE
,txtSTOCKS
(请参阅橙色箭头) {1}}。
我该怎么做?
txtITEM
如何根据private void frmPOS_Load(object sender, EventArgs e)
{
con.Open();
cmd = new SqlCommand(@"SELECT ItemCode,ItemName,Price,Stocks FROM INVENTORY;", con);
rdr = cmd.ExecuteReader();
AutoCompleteStringCollection Collection = new AutoCompleteStringCollection();
while (rdr.Read())
{
Collection.Add(rdr.GetString(1));
}
txtITEM.AutoCompleteCustomSource = Collection;
con.Close();
}
自动填充txtITEMCODE
,txtITEMNAME
,txtPRICE
,txtSTOCKS
?
我需要这个,请提前谢谢
答案 0 :(得分:0)
您有2个选项。每次用户从数据库中选择相应值时,都会读取并填充TextBox
个。
或者您可以读取它们一次并将代码中某些位置从DB获取的值存储起来。对于后者,我给你一个小例子,说明如何做到这一点。
// store here all your values later
List<string> allvalues = new List<string>();
private void frmPOS_Load(object sender, EventArgs e)
{
// all your DB stuff...
// here are my example values
// NOTE! your values might be separated differently!
allvalues.Add("ItemCode,ItemName,Price,Stocks");
allvalues.Add("ItemCode2,ItemName2,Price2,Stocks2");
allvalues.Add("ItemCode3,ItemName3,Price3,Stocks3");
allvalues.Add("ItemCode4,ItemName4,Price4,Stocks4");
AutoCompleteStringCollection Collection = new AutoCompleteStringCollection();
// corresponds to your rdr.GetString(1) command
Collection.Add("ItemName");
Collection.Add("ItemName2");
Collection.Add("ItemName3");
Collection.Add("ItemName4");
txtITEMNAME.AutoCompleteCustomSource = Collection;
txtITEMNAME.AutoCompleteSource = AutoCompleteSource.CustomSource;
txtITEMNAME.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
}
现在您需要决定何时填写其余部分。当用户选择了正确的自动完成值并按下 ENTER 键时,我决定在此示例中执行此操作。所以我使用KeyDown
事件来检查并填充所有其他TextBoxes
:
private void txtITEMNAME_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// separate your values with split according to your separator
string[] seperatedvalues = allvalues.FirstOrDefault(x => x.Contains(txb_ItemAutocomplete.Text)).Split(',');
if(seperatedvalues.Length == 4) // make sure that you found any values at all
{
txb_Code.Text = seperatedvalues[0];
txb_Price.Text = seperatedvalues[2];
txb_Stocks.Text = seperatedvalues[3];
}
}
}
根据您的需要调整此代码。我希望它有所帮助。