2009-04-16 4 views
1

データバインドされたComboBoxで '選択されていません'を指定する方法に関する設計上の決定に達しました。これをComboBoxが必要とするすべての将来の発生に適用したいと思います。データバインドされたコンボでSelectedIndexを-1に設定することも、SelectedValueをnullに設定することもできません。コンボボックスのダミーアイテム

一般的に示唆されている解決策は、コンボにダミー行を追加することですが、行にバインドされたオブジェクトを知らない場合、コンボは「選択されていません」メッセージを表示するような方法でダミーオブジェクトを確実に作成できません。私はダミーオブジェクトを使用しない他のクライアントのためにリストを危険にさらすので、データソースに別のアイテムを追加したくありません。

その他のオプションはありますか?ところで、Telerik RadComboBoxを使用していますが、このシナリオはTelerikコントロールに固有のものではありません。

答えて

2

あなたは、マークアップで「空のアイテム」を定義し、任意のデータバインド項目を追加することができます

<asp:DropDownList DataSourceID="..." AppendDataBoundItems="true" ...> 
    <asp:ListItem Value="-1" Text="None"></asp:ListItem> 
</asp:DropDownList> 

キーは、データバインド項目を追加するAppendDataBoundItems =「true」をを指定することですマークアップ内で直接指定された項目に適用されます。

これは、標準のASP.NET DropDownListではなく、Telerik RadComboBoxでも機能します。

+2

また、もしあなたがそれをしたら、それは必要なフィールドにしたいと言っておく価値があります。 RequiredFieldValidatorに 'InitialValue =" - 1 "'プロパティを指定することができます –

1

データバインドの前に新しい項目を追加し、AppendDataboundItems = trueを設定します。

cbo.AppendDataboundItems = true; 
cbo.Items.add(new ListItem("None", "-1"); 
cbo.DataSource = x; 
cbo.DataBind(); 
0

希望I ThickClientでAppendDataBoundItemsようがないプロパティ(ウィンドウのApp)ゼロ番目のインデックスに自分のデータソーステーブルの ベター挿入ダミー行。

 DataRow dr = dtsource.NewRow(); 
     dr["username"] = "--New User---"; 
     dr["Userid"] = 0; 


     dtsource.Rows.InsertAt ((dr),0); 
     cmbToUser.DataSource = dtsource; 
0

IMOこれは、データバインディングがその面で平坦になる場所です。データバインドされていないコントロールでは、これは本当に簡単です。他のアイテムを手動で追加する前に、ダミーアイテムをコンボボックスに追加するだけです。

データバインドされているすべてのタイプのコンボボックスで確実にこれを行うには、データバインディングが最初に表示されるはずのプレゼンテーションと機能の分離に違反するものをデータセットに追加する必要があります。

多くの場合、データバインディングはポイントまで時間を節約します。データバインディングの欠点を克服するためにハッキングを開始すると、もう時間を節約できません。

これは、通常、データバインディングが正しい解決策であるかどうかを再評価することをお勧めします。

/肩書き