2009-06-11 19 views
29

私のページにはDropDownListがあり、データベース値はSqlDataSource(以下のコードを参照)から取り込んでいます。asp.net dropdownlist - db値の前に空白行を追加する

値の前に自分のテキストや空白行を追加するにはどうすればよいですか?

<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
    AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
     DataValueField="client_id"> 
</asp:DropDownList> 
<asp:SqlDataSource ID="dsClients" runat="server" 
    ConnectionString="my_connection_string" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT [client_id], [name] FROM [clients]"> 
</asp:SqlDataSource> 

ありがとうございます。

P.S. SqlDataSourceを使用することをお勧めですか、別の方法で入力する方が良いですか?

+0

関連するリンク:http://stackoverflow.com/questions/267064/asp-net-add-blank-item-at-top-of-dropdownlist – mcfea

答えて

50

DropDownListマークアップ内にListItemを追加するだけで簡単に追加できます。その後、DataSourceのすべての値が追加されます。

<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
      AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
      DataValueField="client_id" AppendDataBoundItems="true"> 
    <asp:ListItem>-- pick one --</asp:ListItem> 
</asp:DropDownList> 
+6

「置き換える」のではなく「追加」する必要があります' –

+0

あなたが言ったように、それは簡単に間違っています:-) –

20
<asp:DropDownList ID="drpClient" runat="server" Width="200px" 
     AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" 
     DataValueField="client_id" AppendDataBoundItems="True"> 

    <asp:ListItem Text="" Value="" /> 
</asp:DropDownList> 

私が追加したAppendDataBoundItems属性を忘れないようにしてください。

6

私はこれを実際にテストしていませんが、ドロップダウンリストをバインドした後にアイテムを追加できると仮定しています。この空のボックスを追加するドロップダウンリストにこのイベントを追加することができます。

protected void DropDownList_DataBound(object sender, EventArgs e) 
    { 
     DropDownList ddl = (DropDownList)sender; 
     ListItem emptyItem = new ListItem("", ""); 
     ddl.Items.Insert(0, emptyItem); 
    } 
+2

ジャスティン - ラインを追加するこの方法の問題は、まだ選択可能であるということです。分離のために空白行が追加された場合、その行をユーザーが選択することはできません。 –

2

私は空のオプションの追加selectコマンドを変更解く:

 <asp:SqlDataSource ID="dsClients" runat="server" 
      ConnectionString="my_connection_string" 
      ProviderName="System.Data.SqlClient" 
      SelectCommand="SELECT [client_id], [name] FROM [clients] union SELECT NULL, '--- pick one ----' "> 
     </asp:SqlDataSource> 

挨拶を!ロード上で実行される

@Html.EnumDropDownListFor(
    model => model.Privilege.Role, 
    "-- Select role --", 
    new 
    { 
     @style = "width: 216px !important", 
     @class = "form-control", 
     id = "role", 
     required = "required" 
    }) 

とJavaScriptで私はこれを持っている:

function PutDefaultPrivilegePanelListHints() { 
    $('#role').val(''); 
    ... 
} 

控えめ経由して、より柔軟な解決策もあり、それはこのようになります私のかみそりスタイルの実装では

1

検証(HTML5を考慮しない):

$('.required').each(function() { $(this).rules('add', { required: true, messages: { required: '' } }) }); 

もちろん、サーバーサイドeチェックも。 クラスに対処することは良い考えではないと思います。 たとえば、ページに表示されるものは何らかのクラスです。このクラスには、いくつかの列挙型のプロパティがあります。これらのプロパティをすべて複製するのは悪夢ですが、stackoverflowでここで提案されているように、いくつかの追加クラスではnull可能にしています。

結局のところ、特定のマークアップのためにビジネスロジックを変更する必要があるのはなぜですか?代わりに、私はjavascriptといくつかのモデルチェックを介してすべてを扱います。

関連する問題