0

私はこの問題に繰り返し遭遇しましたが、何が原因であるのかわかりません。DataBindで例外が発生します:

"SelectedValue which is invalid because it does not exist in the list of items"

重要な情報は次のとおりです。

  1. 基になるデータが変更されたときに、listOrgsを定期的にリロードします。
  2. Organization.DTListAll呼び出しは、約500のInt、Stringペアを返します。
  3. 返されたデータに重複またはnull値はありません
  4. 以下の最初の2行の後、listOrgs.Items.Countは0であり、選択された値は0です。
  5. DataBind操作の実行時に選択された値は、返されるID値のセットに含まれていない値です。

listOrgs.Items.Clear();
listOrgs.SelectedValue = "0";
listOrgs.DataSource = new Organization().DTListAll(SiteID);
listOrgs.DataTextField = "OrganizationName";
listOrgs.DataValueField = "OrganizationID";
listOrgs.DataBind();
4

1 に答える 1

0

既存の値を確認する

    this.DropDownList1.Items.Clear();
    //--dont use this:
    //this.DropDownList1.SelectedValue = "0";
    DataTable dt = new DataTable();
    dt.Columns.Add("x", typeof(System.Int32));
    dt.Columns.Add("xs", typeof(System.String));
    for (int x = 0; x < 100; x++)
    {
        DataRow dr = dt.NewRow();
        dr["x"] = x;
        dr["xs"] = x.ToString();
        dt.Rows.Add(dr);
    }
    DropDownList1.DataValueField = "x";
    DropDownList1.DataSource = dt;
    DropDownList1.DataBind();
    // check for existing value:
    int valueToCheck = 99; // last item
    if (this.DropDownList1.Items.FindByValue(valueToCheck.ToString()) != null)
    {
        this.DropDownList1.SelectedValue = valueToCheck.ToString();
    }

それに加えて、バインドする前に datatext および datavalue フィールドを設定したい場合があります(パフォーマンス++であることがわかります)。

于 2010-04-21T14:03:13.257 に答える