更新しました
別のコンボボックスから選択された値に基づいてコンボボックスを更新するアプリケーションがあります。たとえば、州コンボボックスのリストは、「国」コンボボックスから選択された国に基づいて入力されます。州コンボボックスのデータソースは、MySQL に基づくデータセットです。データベース。問題は、国が最初に選択された場合、州のコンボボックスが正常にロードされることですが、別の国を選択すると、州のコンボボックスに次の情報が入力されます。
System.Data.DataViewManagerListItemTypeDescriptor
調べたところ、この問題はコンボボックスのデータソースを更新できないことに関係していることがわかりましたが、値が別のテーブルに格納されており、別のクエリが必要なため、これを行う必要があります。では、どうすればデータソースをクリアしてこの問題を解決できますか?
投稿を更新して、以下のコードを追加しました (最初は、ここで選択した値に基づいて次の値を入力する最初のコンボボックスのコードです:
private void cboDisp1_SelectedIndexChanged(object sender, EventArgs e)
{
cboProd1.Enabled = false;
cboProd1.Invalidate();
string dispensation1;
dispensation1 = cboDisp1.SelectedValue.ToString();
if (dispensation1 == "1")
{
}
else
{ cboProd1.Enabled = true;
LoadDispensationCode(dispensation1,"1");
}
}
次のコードは、2 番目のコンボボックスに値を設定するメソッドの一部を示しています。
private void LoadDispensationCode(string text_id,string line_no)
{
string txt_id=text_id;
string ln_no=line_no;
//MessageBox.Show(txt_id, "Value");
txt_id = text_id;
if (txt_id == "1")
{ }
if
(txt_id == "2")
{ LoadConsultation("1","1"); }
if(txt_id=="3")
{
LoadDrug(ln_no);
}.......
このコードは、MySQL データベースへのクエリに基づいてデータセットを埋め、コンボボックスをロードするメソッドを示しています。
private void LoadDrug(string line_no)
{
string ln_no;
ln_no = line_no;
//MessageBox.Show(ln_no,"value of text");
if (ln_no =="1")
{
try
{
MySqlConnection connection = HopeDB.GetConnection();
String selectStatement = "Select id,code from drugs order by id";
MySqlCommand command = new MySqlCommand(selectStatement, connection);
MySqlDataAdapter adapter = new MySqlDataAdapter();
DataSet ds = new DataSet();
adapter.SelectCommand = command;
adapter.Fill(ds, "drugs");
adapter.TableMappings.Add("Table", "drugs");
cboProd1.DisplayMember = "drugs.code";
cboProd1.ValueMember = "drugs.id";
cboProd1.DataSource = ds;
connection.Close();
}
catch (Exception ex)
{ MessageBox.Show(ex.Message, ex.GetType().ToString()); }
}
}
このコードは、別のデータセットを生成する別の方法です。
private void LoadVaccine(string line_no)
{
string ln_no = line_no;
if (ln_no == "1")
{
try
{
MySqlConnection connection = HopeDB.GetConnection();
String selectStatement = "Select id,code from vaccines order by id";
MySqlCommand command = new MySqlCommand(selectStatement, connection);
MySqlDataAdapter adapter = new MySqlDataAdapter();
DataSet ds = new DataSet();
adapter.SelectCommand = command;
adapter.Fill(ds, "vaccines");
adapter.TableMappings.Add("Table", "vaccines");
cboProd1.DisplayMember = "vaccines.code";
cboProd1.ValueMember = "vaccines.id";
cboProd1.DataSource = ds;
//cboStateIDFNo.Enabled =false;
//cboVisitType.Enabled =false;
//cboStatus.Enabled = false;
connection.Close();
}
catch (Exception ex)
{ MessageBox.Show(ex.Message, ex.GetType().ToString()); }
}
}
前述のように、最初のコンボボックスが変更され、別のメソッドが呼び出されたときに、別のデータセットからの新しいデータでコンボボックスを更新する際に助けが必要です。