基于一个文本框值自动填充文本框并输出另一个文本框

时间:2017-03-03 10:53:07

标签: c# database winforms events textbox

This is the form 在加载事件中,我设法设置了txtITEM的自动完成源。我试图在txtITEM中显示数据库中的数据。但我想根据{的值自动填充余下的TextBox es:txtITEMCODEtxtITEMNAMEtxtPRICEtxtSTOCKS(请参阅橙色箭头) {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(); } 自动填充txtITEMCODEtxtITEMNAMEtxtPRICEtxtSTOCKS

我需要这个,请提前谢谢

1 个答案:

答案 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];
        }
    }
}

根据您的需要调整此代码。我希望它有所帮助。