public class PopulateProduct
{
public string ProductDesc { get; set; }
public decimal UnitPrice { get; set; }
}
Dictionary<string, PopulateProduct> dict = new Dictionary<string, PopulateProduct>();
public void load()
{
string connstr = "user id=rawpic;password=admin";
string cmdtxt = @"select PRODUCT_ID,DESCRIPTION,UNIT_PRICE
from products";
AutoCompleteStringCollection autocom = new AutoCompleteStringCollection();
TB_PRODUCT_ID.AutoCompleteMode = AutoCompleteMode.Suggest;
TB_PRODUCT_ID.AutoCompleteSource = AutoCompleteSource.CustomSource;
TB_PRODUCT_ID.AutoCompleteCustomSource = autocom;
using (OracleConnection conn = new OracleConnection(connstr))
using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
{
try
{
conn.Open();
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
dict.Add((string)dr["PRODUCT_ID"],
new PopulateProduct()
{
ProductDesc = (string)dr["DESCRIPTION"],
UnitPrice = (decimal)dr["UNIT_PRICE"]
});
autocom.Add(dr["PRODUCT_ID"].ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
private void TB_PRODUCT_ID_TextChanged(object sender, EventArgs e)
{
if (dict.ContainsKey(TB_PRODUCT_ID.Text))
{
TB_PRODUCTS_DESC.Text = dict[TB_PRODUCT_ID.Text].ProductDesc;
TB_UNIT_PRICE.Text = dict[TB_PRODUCT_ID.Text].UnitPrice.ToString();
}
}
を更新------ -------
私は以下の旧スクリプト以下のコードを使用して自動完成textbox
値のデータ は自動的に別の2つの値を変更しますtextboxs
商品の説明a nd価格下のコードは正常に動作しますが、 の説明textbox
の値が正しいとは限りません。最後のデータベースレコードの値を取得します。
最後に、自動完了を行うより速い方法がありますか?
ノートでは、それがユーザーの後に起こることがあり、製品IDですぐに説明と価格textbox
同期を更新する必要がないことも可能と速い場合に選択のように製品ID を選択する方法を
private void TB_PRODUCT_ID_TextChanged(object sender, EventArgs e)
{
string connstr = "user id=rawpic;password=admin";
string cmdtxt = @"select PRODUCT_ID,DESCRIPTION,UNIT_PRICE
from products";
AutoCompleteStringCollection autocom = new AutoCompleteStringCollection();
TB_PRODUCT_ID.AutoCompleteMode = AutoCompleteMode.Suggest;
TB_PRODUCT_ID.AutoCompleteSource = AutoCompleteSource.CustomSource;
TB_PRODUCT_ID.AutoCompleteCustomSource = autocom;
using (OracleConnection conn = new OracleConnection(connstr))
using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
{
try
{
conn.Open();
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
autocom.Add(dr["PRODUCT_ID"].ToString());
TB_PRODUCTS_DESC.Text = dr["DESCRIPTION"].ToString();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
教えてください私は一部、以下のように、SELECT文のためのパラメータを追加して疲れていたが、それは文句を言わないあなただけのクエリのPRODUCT_ID結果からリストを移入している
private void TB_PRODUCT_ID_TextChanged(object sender, EventArgs e)
{
string connstr = "user id=rawpic;password=admin";
string cmdtxt = @"select PRODUCT_ID,DESCRIPTION,UNIT_PRICE
from products
where PRODUCT_ID=:PRODUCTID";
AutoCompleteStringCollection autocom = new AutoCompleteStringCollection();
TB_PRODUCT_ID.AutoCompleteMode = AutoCompleteMode.Suggest;
TB_PRODUCT_ID.AutoCompleteSource = AutoCompleteSource.CustomSource;
TB_PRODUCT_ID.AutoCompleteCustomSource = autocom;
using (OracleConnection conn = new OracleConnection(connstr))
using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
{
try
{
conn.Open();
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
autocom.Add(dr["PRODUCT_ID"].ToString());
cmd.Parameters.Add(new OracleParameter("PRODUCTID", TB_PRODUCT_ID.Text));
TB_PRODUCTS_DESC.Text = dr["DESCRIPTION"].ToString();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
最初のクエリにはWHERE句がないため、正しく動作しません。あなたの2番目のクエリは行いますが、なぜそれがうまくいかないのかを教えてくれません。詳細をお知らせください。 –
AutoCompleteStringCollectionを使用すると、いつでも再クエリーする必要はありません!すべての単語でコレクションを初期化するだけで、.Netはユーザーの入力時に提案のフィルタリングを処理します。これは、あなたのスピードの問題がなくなるはずです... – SlimsGhost