0

ユーザーがコンボボックスに入力できるように、ドロップスタイルがドロップダウンとして設定された、データバインドされたコンボボックスを持つフォームがあります。

私の問題は、ユーザーがコンボボックスに入力し、入力された値がコンボボックスにバインドされた値の1つと一致する場合、私も試してみましたが、selectedindexが変更されないことです。代わりに、選択されたインデックスを -1 に設定します (したがって、選択された値は null になります)。

誰でも助けることができますか?これが私のコードです(私の試みの1つです。他のアプローチを試しましたが、何も役に立ちませんでした)。

private void setCombo()
{
        comboFromOther.DisplayMember = "tbl10_KupaID";
        comboFromOther.ValueMember = "tbl10_KupaID";
        comboFromOther.DataSource = dsKupotGemel.Tables[0];
}

private void comboToOther_TextChanged(object sender, EventArgs e)
{
        comboDetail = changedComboText(2, comboToOther.Text);
        textToOther.Text = comboDetail[0];
        if (comboDetail[0] == "")
        {

        }
        else
        {
            comboToOther.SelectedIndex = System.Int32.Parse(comboDetail[1]);
            comboToOther.SelectedValue = System.Int32.Parse(comboDetail[2]);
        } 
    }

    private string[] changedComboText(int iComboType, string comboString)
    {
        if (groupCalculate.Visible == true)
        {
            groupCalculate.Visible = false;
        }
        string[] kupaDetail = new string[3];
        kupaDetail[0] = "";
        kupaDetail[1] = "";
        kupaDetail[2] = "";
        for (int i = 0; i <= dsKupotGemel.Tables[0].Rows.Count - 1; i++)
        {
           if (comboString == dsKupotGemel.Tables[0].Rows[i][0].ToString())
           {
                 kupaDetail[0] = dsKupotGemel.Tables[0].Rows[i][1].ToString();
                 kupaDetail[1] = i.ToString();
                 kupaDetail[2] = comboString;
                 break;
           }
           else
           {

           }
        }
   return kupaDetail;
}
4

1 に答える 1

0

多分あなたのコードにエラーがありますか?

これが実際のサンプルです:

// Fields
private const string NameColumn = "Name";
private const string IdColumn = "ID";

private DataTable table;

次に、初期化

// Data source
table = new DataTable("SomeTable");
table.Columns.Add(NameColumn, typeof(string));
table.Columns.Add(IdColumn, typeof(int));

table.Rows.Add("First", 1);
table.Rows.Add("Second", 2);
table.Rows.Add("Third", 3);
table.Rows.Add("Last", 4);

// Combo box:
this.comboBox1.DisplayMember = NameColumn;
this.comboBox1.ValueMember = IdColumn;
this.comboBox1.DataSource = table;
this.comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
this.comboBox1.TextChanged += comboBox1_TextChanged;
this.comboBox1.SelectedIndexChanged += this.comboBox1_SelectedIndexChanged;

イベント ハンドラー - TextChanged:

private void comboBox1_TextChanged(object sender, EventArgs e)
{
    for (int i = 0; i < table.Rows.Count; i++)
    {
        if (table.Rows[i][NameColumn].ToString() == this.comboBox1.Text)
        {
            this.comboBox1.SelectedValue = table.Rows[i][IdColumn];
            break;
        }
    }
}

イベント ハンドラー - SelectedIndexChanged:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // Do here what is required
}

このコードでは、ユーザーが項目の完全な名前をコンボ ボックスに入力するとすぐに、TextChanged を介して SelectedIndexChanged が呼び出されます。

AutoCompleteModeAutoCompleteSourceなどもあります。それらがアプリケーションのどこに適合するかわかりません。

于 2013-01-01T20:13:29.780 に答える