私はこの問題に繰り返し遭遇し、それを引き起こしている原因を特定できません。 DataBindで例外が発生します:SelectedValue which is invalid because it does not exist in the list of items
。
ここにいくつかの重要な情報があります:
listOrgs.Items.Clear();
listOrgs.SelectedValue = "0";
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName";
listOrgs.DataValueField = "OrganizationID";
listOrgs.DataBind();
どうやら私が投稿したソリューションは完全に効果的ではなかったようです...最終的には私のアプリケーションでこれに変更しました:
listOrgs.Items.Clear();
listOrgs.SelectedIndex = -1;
listOrgs.SelectedValue = null;
listOrgs.ClearSelection(); // Clears the selection to avoid the exception (only one of these should be enough but in my application I needed all..)
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName";
listOrgs.DataValueField = "OrganizationID";
listOrgs.DataBind();
このエラーが何度も発生しました。
奇妙なことに、データソースを設定してアイテムを削除した後に再バインドする前に、選択されたインデックス= -1です。
selectedIndex = -1;
を明示的に設定すると、機能し、エラーはスローされません。
つまり、既に-1に設定していても、-1に設定するとエラーが発生しなくなります。
変なの?
設定してみてくださいlistOrgs.SelectedValue = "0"
DataSource
を更新した後
現時点では、空のリストの最初のアイテムを選択しようとしています。
それがあなたのケースかどうかはわかりませんが、同じ問題があり、どうやら説明がなかったため、データベースのフィールドのメモ帳にコピーアンドペーストすると、値の先頭にNULLがあったことに気付きました。
奇妙なことに、選択した結合テーブルが機能していた。私は行を削除して再挿入しましたが、問題なく動作しました。
あなたがまだこの問題を抱えている場合、これが私がそれを解決した方法です:
listOrgs.SelectedIndex = -1; // Clears the SelectedIndex to avoid the exception
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName";
listOrgs.DataValueField = "OrganizationID";
listOrgs.DataBind(); //Unless you have "listOrgs.AppendDataBoundItems = true" you don't need to clear the list
@PMarquesの回答は私を助け、私の問題を解決しました。
しかし、実験をしていると、なぜ最初にエラーが発生したのかが頭の中でわかりました。
私は「テキスト」属性を設定していましたが、これは、それを囲むラベルまたはフィールドセット+凡例を作成する可能性があると考えていました(作成しません)。
リストの Textプロパティ は、ListControlのSelectedValueプロパティに影響を与えます。
したがって、textプロパティが何をしたのかを誤解する私の間違い。
これで最初の2行を変更します。
listOrgs.SelectedItem.Selected = false;
listOrgs.Items.Clear();
同じエラーが繰り返し発生し、デフォルトの選択された値をインデックス-1に設定しないようにしてしまいました。
コードにコメントしましたddlDRIBidAmt.SelectedValue = -1
この値は、ページコントロールがデフォルト値にリセットされたときに設定されました。
私は答えるのが遅すぎることを知っていますが、私が試したことは汚い解決策ですが、それはうまくいきました。データバインド後、インデックス0にアイテムを挿入します
ddl.Items.Insert(0, new ListItem("---Select---","-1"));
そしてセッティングで、
私はトライキャッチを配置しています、キャッチでは値を-1に設定しています