質問

してい DropDownListUpdatePanel これに可から SqlDataSource.このパラメーターならでは。りのあるところに必要な複数の供され、そこで起こることは、各時間のパネルの更新更新項目追加され DropDownList.その DropDownList 終わると、データが正しくない場合、または繰り返します。

を持ってい AppendDataBoundItems プロパティを設定す true で-さんありがとうございます。初の項目を空白にします。

たいのですがこの問題なのか。しおりを付けることができてい空の第一商品?

(この DropDownList ですがASP.NET web2.0アプリcodebehindはクライアントまで、フルのC#)

役に立ちましたか?

解決

の代わりにAppendDataboundItems='true'(あなたが話している問題が発生します)を使用しての、DataBoundためDropDownListイベントに応答して、リストの一番上にあなたの「空白」の項目を追加します。

<asp:DropDownList runat="server" ID="MyList"
  ondatabound="MyListDataBound"></asp:DropDownList>

そして、背後にあるコードでます:

protected void MyListDataBound(object sender, EventArgs e)
{
    MyList.Items.Insert(0, new ListItem("- Select -", ""));
}

他のヒント

について答えることができるので感じることが必要となどにより情報がありますの複数のオプションを作る必要があります。

まず、こ AppendDataBoundItems.の場合 AppendDataBoundItems = "true", ListItems 追加され DropDownList な清算出すのです。そうしないと、 DropDownList クリアして、次の DataBind. MSDN AppendDataBoundItems doc

基本的には2つのオプション対象の応答:

1.を定義する空のオプションをhtmlに追加しListItemsデータベースからのDropDownListだけます。

通知3のものはこちら

  • 空白 ListItem に定義されてhtml
  • AppendDataBoundItems="true"
  • DataBind 呼び出されることはありませんに供される場合、又は DropDownList 項目 カウントは>1

ソース:

<asp:DropDownList ID="MyList" runat="server" AppendDataBoundItems="true" DataValueField="Id" DataTextField="Name" >
    <asp:ListItem Text="- Select One -" Value="" />
</asp:DropDownList>

コード:

protected void Page_Load(object sender, System.EventArgs e)
{
    if (MyList.Items.Count <= 1 ) {
        MyList.DataSource = MyDataSource;
        MyList.DataBind();
    }
}

注意:私の論理確認をカウントvsチェック IsPostBack.が供されている多くの重複databindingできる事になるすることはいたしません。チェック項目をカウントは基本的にだけチェックがすでに出して読み込まれます。

(オプションの利用 IsPostBack 代わりに)

protected void Page_Load(object sender, System.EventArgs e)
{
    if (!IsPostBack) {
        MyList.DataSource = MyDataSource;
        MyList.DataBind();
    }
}

2.リブDropDownList各ページのリフレッシュ。

通知3差からの最初のオプション:

  • AppendDataBoundItems="false" うことができなくなった定義されていないし false がで デフォルト値)
  • 空白 ListItem では、追加コードを作ります。できませんで指定することができまhtml がついているので AppendDataBoundItems="false", でクリアされます。
  • DataBind 呼び出したときに、毎 Page_Load

ソース:

<asp:DropDownList ID="MyList" runat="server" DataValueField="Id"  DataTextField="Name" 
    OnDataBound="MyList_DataBound" >
</asp:DropDownList>

コード:

protected void Page_Load(object sender, System.EventArgs e)
{
    MyList.DataSource = MyDataSource;
    MyList.DataBind();
}

protected void MyList_DataBound(object sender, EventArgs e)
{
    MyList.Items.Insert(0, new ListItem("- Select One -", ""));
}

あなたはおそらく背後にあるコードでそのDropDownListコントロールをバインドします。だから、あなたは再びポストバック後にそれを行うべきではありません。

// probably in Page_Load method
if (!Page.IsPostBack)
{
    // do data binding here
};

ここでアイデアがある、我々は2つのイベントを使用することができます。のデータバインドデータバインディング

protected void MyListDataBound(object sender, EventArgs e)
{
  MyList.Items.Insert(0, new ListItem("- Select -", ""));
}

protected void MyListDataBinding(object sender, EventArgs e)
{
  MyList.Items.Items.Clear();
}
<asp:DropDownList ID="DropDownList1" AppendDataBoundItems="true" runat="server"
  DataSourceID="SqlDataSource1" DataTextField="state" DataValueField="state">
    <asp:ListItem Text="(Select a State)" Value="" />
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
  ConnectionString="<%$ ConnectionStrings:pubsConnectionString %>"
  SelectCommand="SELECT DISTINCT [state] FROM [authors]">
</asp:SqlDataSource>

ここでの考え方です。

AutoPostBack trueに設定すると、あなたの背後にあるコードでif(!Page.IsPostBack)内のすべての結合方法を置くと呼ばれるドロップダウンリスト内のプロパティがあります。それは私のために働いています。

よろしくます。

ただ、ドロップダウンタグ

にのの EnableViewState = "false" に追加します。
<asp:DropDownList runat="server" ID="DropDownList1" DataSourceID="SqlDataSource" 
DataTextField="Name" DataValueField="ID" EnableViewState="false" 
AppendDataBoundItems="true">
    <asp:ListItem Value="">Select</asp:ListItem>
</asp:DropDownList>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top