2013-02-01 3 views
6

asp.netのドロップダウンリストへのバインディングに問題があり、デバッグ方法の手がかりがありません。私はこれについての他の質問をスタックでチェックアウトしたが、何も助けてくれなかった。私が見る限り、選択すべき "名前"はリストにあります。にはSelectedValueがありますが、これはアイテムのリストに存在しないため無効です。どのようにデバッグしますか?

<asp:DropDownList ID="dd1" runat="server" DataSourceID="ADataSource" DataTextField="Name" 
                DataValueField="Name" SelectedValue='<%# Bind("Name") %>' Width="255" 
                AppendDataBoundItems="true" TabIndex="3" Font-Size="small" EnableViewState="true" > 
              <asp:ListItem Text="Select" Value="" /> 
              </asp:DropDownList> 

以下のエラー

System.ArgumentOutOfRangeExceptionが、ユーザーコードで未処理だった メッセージ=「DD1」は、項目のリストに存在しないため無効であるSelectedValueのを持っています。 パラメータ名:値 ソース= System.Webの のparamName =値 のStackTrace:System.Web.UI.WebControls.ListControl.OnDataBindingでSystem.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerableを のdataSource) で ( System.Web.UI.Control.DataBindChildren() at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() at System.Web.UI.WebControls.ListControl.PerformSelect() System.Web.UI.Control.DataBind()のSystem.Web.UI.Control.DataBind()の のWeb.UI.Control.DataBind(ブール値のraiseOnDataBinding) (System.Web.UI.Control.DataBindChildren()) System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) at System.Web.UI.Control.DataBind() at System.Web.UI.Control.DataBindChildren() at System.Web.UI.Control .DataBind(Boolean raiseOnDataBinding) at System.Web.UI.Control.DataBind() at System.Web.UI.Control.DataBindChildren() at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) at System System.Web.UI.WebControls.DetailsView.PerformDataBindingでSystem.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBindingで.Web.UI.WebControls.DetailsView.CreateChildControls(IEnumerableを データソース、ブールのdataBinding) (IEnumerableを データ) ( IEnumerable System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 引数、DataSourceViewSelectCallbackコールバック)System.Web.UI.WebControlsで でSystem.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerableを データ) でデータ) 。ライン233におけるstoreUpdate.GvStoresSelect_SelectedIndexChanged(オブジェクト送信者、のEventArgs電子)でSystem.Web.UI.WebControls.DetailsView.DataBindでSystem.Web.UI.WebControls.BaseDataBoundControl.DataBindでDataBoundControl.PerformSelect() () () at System.EventHandler.Invoke(Object sender、EventArgs e) at System.Web.UI.WebControls.GridView.OnSelectedIndexChanged(EventArgs e)System.Web.UI.WebControls.GridView.HandleSelect(のInt32 rowIndexプロパティ)System.Web.UI.WebControls.GridView.HandleEventで (EventArgsの電子、ブールcausesValidation、文字列validationGroup)System.Web.UI.WebControlsで で。 System.Web.UI.WebControls.GridViewRow.OnBubbleEventでSystem.Web.UI.Control.RaiseBubbleEvent(オブジェクトソース、のEventArgsの引数) でGridView.OnBubbleEvent(オブジェクトソース、のEventArgs電子) (オブジェクトソース、E EventArgs)を System.Web.UI.WebControls.LinkBut​​tonのSystem.Web.UI.WebControls.LinkBut​​ton.OnCommand(CommandEventArgs e) のSystem.Web.UI.Control.RaiseBubbleEvent(オブジェクトソース、EventArgsのargs)で 。System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl、文字列eventArgumentでRaisePostBackEvent System.Web.UI.WebControls.LinkBut​​ton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(文字列 eventArgument)で(文字列 eventArgument) )System.Web.UI.Page.ProcessRequestMain(ブールincludeStagesBeforeAsyncPoint、ブールのincludeStagesAfterAsyncPoint) のInnerExceptionでSystem.Web.UI.Page.RaisePostBackEvent(NameValueCollectionのPOSTDATA) で:

答えて

6

<%# Bind("Name") %>からの値、そのSelectedValに渡されます。 ueプロパティはコレクション内のアイテムと一致しません。最も可能性の高い原因:リストは、リストがバインドされている

  • を拘束される前に評価が行われるため

    • のDropDownListは何のアイテムを持っていないが、この特定の値
    • nullになる可能性があり、戻り値に欠けている
  • +0

    使用しようとしている値が離れていますか? – chobo2

    +1

    コントロールの外側で '<%#Eval(" Name ")%>'を使用して、ロードする内容を確認してください。 –

    2

    これは古いスレッドだとわかっていますが、Googleはこの問題の第1の選択肢として、これをかなり一般的な検索語で紹介しました。

    とにかく、これと私が問題を解決した方法は次のとおりです。ブライアン・メインズは、次のような理由で言ったような問題は、発生します次のいずれか

    • のDropDownListリストは、リストがバインドされているが、この特定の値が欠落している
    • を拘束される前に評価が起こるので、何のアイテムを持っていない
    • 返さ
    • 値は、私は目のいくつかのエラーを取得していないとして、それは非常に明確ではなかったにもかかわらず、経験していた問題

    nullになる可能性私は同じ方法を使用していた電子他のドロップダウンには、ページのロード時に、私は、DropDownListコントロールに項目を追加するには、このコードビハインドを使用しようとしていたということでした。

    drpNationality.Text = GlobalScript.CountDatabaseRecords("SELECT [nationality_desc] FROM [tbl_people] INNER JOIN [tbl_lkup_nationality] AS nationality ON [nationality] = [nationality_id] WHERE [person_id] ='" + Session["ID"] + "'"); 
    

    そしてここでは、ドロップダウンHTML(ありますこれは)データソースによって移入のアイテムを持っていた:今

    <label>Nationality:</label> 
    <asp:DropDownList ID="drpNationality" runat="server" DataSourceID="Nationality_Datasource" DataTextField="nationality_desc" DataValueField="nationality_id"> 
    </asp:DropDownList> 
    

    、私はなっていた問題は、私は内の項目を追加しようとしていたときのデータは、読み込み時にコントロールにバインドされていなかったということでしたコードに従う。私は、リストの中にあったユーザのスタートアップ時にデータベースから値をあらかじめ選択しようとしていたので、項目が本質的に2回現れた場合、私はあまり気にしませんでした。

    私の回避策は次のとおりです。

    var = GlobalScript.CountDatabaseRecords("SELECT [nationality] FROM [tbl_people] INNER JOIN [tbl_lkup_nationality] AS nationality ON [nationality] = [nationality_id] WHERE [person_id] ='" + Session["ID"] + "'"); 
    drpNationality.Items.Add(var); 
    drpNationality.Text = var; 
    

    しかし、選択された項目の順序で:項目がLoadイベントコードの実行上のDropDownListに添加し、次いで選択されたように

    Iは、次の背後のコードを変更しましたページが完全にロードされ、データソースによって上書きされない一度にコードビハインドに滞在するには、次のようにHTMLを変更する必要があります。

    <label>Nationality:</label> 
    <asp:DropDownList ID="drpNationality" runat="server" DataSourceID="Nationality_Datasource" DataTextField="nationality_desc" DataValueField="nationality_id" AppendDataBoundItems="True"> 
    </asp:DropDownList> 
    

    を今、ページがロードされると、値をデータベースからをドロップダウンリストであらかじめ選択し、すべてのDataSource項目も追加する必要があります。

    これが役に立ちます。

    1

    私は同じ問題がありました。ここで何が起こっているのですか?私はもともと私のドロップダウンリストになかった何かに値を設定していました。元々持っていたものがドロップダウンリストに表示したい値の中にない場合、それは機能しません。たとえば、もともとデータにフレッドがあった場合は、そのドロップダウンリストにフレッドを置く必要があります。

    1

    DataBind stinks。私は言及されたすべての提案を試してみたが、どれも働いていなかった。私の場合はmyDDL.Items.Add(new ListItem(myListEntry.Text,myListEntry.Value))

    0

    方法を最初にddlname.text = string.emptyとして設定されたドロップダウンリストをクリアするために - 私のリストを反復処理し、手動で新しいリストアイテムを追加し、その後、nullにSelectedValueを設定する(myDDL.Items.Clear())すべての項目をクリアし、そして終わりました。

    ddlname.items.clear()にリセットされ、これでエラーが解決されました。

    0

    データソースを割り当てる前にドロップダウンコントロールTextプロパティに値が割り当てられている場合、このエラーが発生します。

    例:

    StatusDropDown.Text = "some value"; 
    StatusDropDown.DataSource = statusDatatable; 
    

    第二ラインを実行中に、あなたはそのエラーを取得します。

    0

    私は同様の問題に遭遇しました。基本的な問題は、自分のRadioButtonListで参照される基礎となるSQLデータベースフィールドのフォーマットでした。 DBフィールドをNCHARからVARCHARに変換しました... NCHARはRadiolButtonによる評価でエラーを投げたフィールドに追加のコンテンツを追加すると思います。 NCHARとして配置されたデータをVARCHARにドロップしてロードする必要があるかもしれません。これは私のために働いた。

    関連する問題