5

ページの読み込み時にクライアント型の値に sqlDataSource に自動的にバインドされる asp.net dropDownList があります。ページの読み込み時に、Client オブジェクトも作成しています。そのプロパティの 1 つは ClientType です。Client オブジェクトの ClientType プロパティの値に従って、ddl の SelectedValue を設定しようとしていますが、失敗しました。次のエラー メッセージが表示されます。これは、選択した値を設定しようとしているときにリストがまだ入力されていないためであることを理解しています。この問題を克服する方法はありますか? ありがとうございました!

4

2 に答える 2

5

DataBound イベントを使用する必要があります。データバインディングが完了すると、イベントが発生します

protected void DropDownList1_DataBound(object sender, EventArgs e)
{
    // You need to set the Selected value here...
}

ページ読み込みイベントで本当に値を確認したい場合は、値をDataBind()設定する前にメソッドを呼び出します...

protected void Page_Load(object sender, EventArgs e)
{
    DropdownList1.DataBind();
    DropdownList1.SelectedValue = "Value";
}
于 2011-07-19T12:07:43.043 に答える
4

選択した値を設定する前に、アイテムがリストにあるかどうかを確認し、インデックスで選択します

<asp:DropDownList id="dropDownList"
                    AutoPostBack="True"
                    OnDataBound="OnListDataBound"
                    runat="server />
protected void OnListDataBound(object sender, EventArgs e) 
{
    int itemIndex = dropDownList.Items.IndexOf(itemToSelect);
    if (itemIndex >= 0)
    {
      dropDownList.SelectedItemIndex = itemIndex;
    }
}

編集:追加...

ページの読み込みでバインディングを行っている場合は、次の方法に従ってください。

  • オーバーライドされたDataBind()メソッド内のバインディング関連のすべてのコードを移動する
  • Pageの Page_Load に以下を追加します: (コントロールが DataBind を直接呼び出さない場合、これは親ページの責任です)
if (!IsPostBack)
{
   Page.DataBind(); // only for pages
}
于 2011-07-19T12:08:23.903 に答える