6

このコードを試しているときに上記のエラーが発生します。私は自分のコードだけを与えようとしましたが、役に立ちませんでした。(デフォルトでした)

ここに私のXMLファイルがあります

エラーはcmbProduct_SelectedIndexChangedイベントにあります。

        cmbProduct --> combobox
        cmbBrand   --> combobox

グローバル

        DataSet dsUpdate = new DataSet();

フォームロード

        dsUpdate.ReadXml(@"...\..\stock.xml");
        cmbProduct.DataSource = dsUpdate.Tables[0]
            .DefaultView.ToTable(true, "productname");//.DefaultView;
        cmbProduct.DisplayMember = "productname";
        cmbProduct.SelectedIndex = 0;

cmbProduct_SelectedIndexChanged

        cmbBrand.Items.Clear();
        foreach (DataRow Row in dsUpdate.Tables[0].Select("productname='" + cmbProduct.Text + "'"))
        {
            //cmbBrand.SelectedIndex = i;
            cmbBrand.Items.Add(Row["brandname"].ToString());
            //i++;
        } 
        cmbBrand.SelectedIndex = 0; /*ERROR*/  

よろしくお願い
します。

4

5 に答える 5

6

問題は次のとおりです。

アプリケーションを起動すると、cmbBrand に項目がありませんが、cmbProduct は SelectedIndexChanged を起動します。

これを試して:

Form1.Designer.cs から SelectedIndexChanged イベントの初期化を削除します。次の行を見つけてみてください。

this.cmbProduct.SelectedIndexChanged += new System.EventHandler(this.cmbProduct_SelectedIndexChanged);

その後、xml ファイルのデータを DataSet に入力するときに、SelectedIndexChanged イベントを初期化します。

dsUpdate.ReadXml(@"...\..\stock.xml");
cmbProduct.DataSource = dsUpdate.Tables[0].DefaultView.ToTable(true, "productname");//.DefaultView;
cmbProduct.DisplayMember = "productname";
this.cmbProduct.SelectedIndexChanged += new System.EventHandler(this.cmbProduct_SelectedIndexChanged);
cmbProduct.SelectedIndex = 0;
于 2012-10-11T12:37:45.973 に答える
0

この問題がある場合:

  • Form_Activatedイベント ハンドラーを使用して、インデックスの設定を制御します。
  • 私にとっては、動的に生成された一連の ComboBoxes をフォームに追加しました。
  • SetIndex=0 を使用したいもののリストを作成し、このハンドラーでそれらを繰り返し処理しました。
  • SetIndex を 1 回だけ呼び出すと、boolean の firstFormActivation もありました。
  • ちなみに、このメソッドを Focus() にも使用できるため、動的に追加されたときに Form の最初のフィールドがフォーカスを取得します。

ポイントを説明するためのコードを次に示します。

    private readonly List<ComboBox> combosToSetIndexOn = new List<ComboBox>();
    private bool firstActivation = true;
    private Control firstWindowsControl = null;

    ...
    // Other code sets firstWindowsControl...

    private void DynamicForm_Activated(object sender, EventArgs e)
    {
        if (firstActivation)
        {
            firstActivation = false;
            bool fwcPresent = (firstWindowsControl != null);
            Console.WriteLine($"DynamicForm_Activated: firstWindowControl present: {fwcPresent}");
            if (fwcPresent)
            {
                firstWindowsControl.Focus();
            }

            if (combosToSetIndexOn.Count > 0)
            {
                foreach (ComboBox c in combosToSetIndexOn)
                {
                    Console.WriteLine($"DynamicForm_Activated: processing: {c.Name}");
                    c.SelectedIndex = 0;
                }
            }
        }
于 2019-07-05T13:20:06.440 に答える