ASP.NETでデータバインドされたドロップダウンリストの初期値を設定するにはどうすればよいですか?
たとえば、値が必要ですが、最初に表示する値は-Select One ---、null値である必要があります。
あなたがしたいことはこれだと思います:
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="--Select One--" Value="" />
</asp:DropDownList>
「AppendDataBoundItems」が設定されていることを確認してください 本当 または、データをバインドするときに「--Select One--」リスト項目をクリアします。
ドロップダウンリストの「AutoPostBack」プロパティが設定されている場合 本当 「CausesValidation」プロパティも設定する必要があります 本当 次に、「RequiredFieldValidator」を使用して、「-Select One--」オプションがポストバックを引き起こさないようにします。
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1"></asp:RequiredFieldValidator>
私はこれが古いことを知っていますが、これらのアイデアの組み合わせは非常にエレガントなソリューションにつながります。
DropDownListのすべてのデフォルトプロパティ設定を保持します(AppendDataBoundItems = false、アイテムは空)。次に、次のようにDataBoundイベントを処理します。
protected void dropdown_DataBound(object sender, EventArgs e)
{
DropDownList list = sender as DropDownList;
if (list != null)
list.Items.Insert(0, "--Select One--");
}
ケーキのアイシングは、この1つのハンドラーを任意の数のDropDownListオブジェクトで共有したり、すべてのプロジェクトの汎用ユーティリティライブラリに入れたりできることです。
私がやることは、データバインド後にドロップダウンリストのテキストプロパティを設定することです。このようなもの:
protected void LoadPersonComboBox()
{
var p = new PeopleBLL();
rcmbboxEditPerson.DataSource = p.GetPeople();
rcmbboxEditPerson.DataBind();
rcmbboxEditPerson.Text = "Please select an existing person to edit...";
}
これにより、このドロップダウンの初期の可視値が表示されますが、実際にはドロップダウンの一部ではなく、選択可能でもありません。
私はこれにはすでに選ばれた答えがあることを知っています-しかし、私は2セントで投げたいと思いました。データバインドされたドロップダウンリストがあります:
<asp:DropDownList
id="country"
runat="server"
CssClass="selectOne"
DataSourceID="country_code"
DataTextField="Name"
DataValueField="CountryCode_PK"
></asp:DropDownList>
<asp:SqlDataSource
id="country_code"
runat="server"
ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
SelectCommand="SELECT CountryCode_PK, CountryCode_PK + ' - ' + Name AS N'Name' FROM TBL_Country ORDER BY CountryCode_PK"
></asp:SqlDataSource>
分離コードには、これがあります-(デフォルトで米国を選択します):
if (this.IsPostBack)
{
//handle posted data
}
else
{
country.SelectedValue = "US";
}
ページは、selectedIndexを心配しようとするのではなく、「US」値に基づいて最初にロードされます(データテーブルに別のアイテムが追加された場合-再コーディングする必要はありません)
こんにちはこの場合、あなたは使用することができます
AppendDataBound="true"
その後、リストアイテムを使用します。例えば:
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="--Select One--" Value="" />
</asp:DropDownList>
ただし、この問題は、2回目に選択データに古いデータが追加された後に発生します。
ドロップダウンから値を選択するには、次のようなインデックスを使用します。
私たちが持っている場合
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true"></asp:DropDownList>
あなたが使用します:
DropDownList1.Items[DropDownList1.SelectedIndex].Value
これにより、選択したインデックスの値が返されます。
アイテムを追加し、その「選択」プロパティをtrueに設定します。データバインド時に初期値が削除されないように、おそらく「appenddatabounditems」プロパティをtrueに設定することもできます。
データバインドアイテムにある初期値の設定について話している場合は、ondataboundイベントにフックし、selected = trueにしたいインデックスを設定します。「if if page.isPostBack then ....」でも
Protected Sub DepartmentDropDownList_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DepartmentDropDownList.DataBound
If Not Page.IsPostBack Then
DepartmentDropDownList.SelectedValue = "somevalue"
End If
End Sub