Tip/Trick ASP.NET 2.0: DropDownList DataBind

3779 ワード

に質問
DropDowListで参照データを入力する場合、例えば製品情報を入力する場合、製品カテゴリを選択します.通常、製品カテゴリもデータベースからバインドされているはずです.2つの質問があります.
  • は、データソースに空の値が存在しないため、DropDownListに空の値、すなわちValueが空の文字列のListItemを入れるのにどのように便利か.
  • 製品情報を編集するときに、その製品情報のカテゴリ情報が削除された場合、DropDownListのItemsセットにSelectedValueの値を持つItemが存在しないため、ビューバインドデータを編集するときにDropDownListがエラーを報告する.実はこれはデータの一致性の問題です.

  • やり方
    問題解決1 DropDownListのAppendDataBoundItems属性を利用する必要があり、この属性はASP.NET 1.xはないようなので、2.0の中でずっと気づかなかったが、一日で偶然発見された.名前の通り、この属性の役割は、バインドによって生成されたItemsを既存のItemsの後ろに付加することです.では、問題1を解決するには、                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                               
                                                                                                                    None                                                                                                        
                   
                    ......Other Template.........            
    DropDownList拡張:
        public class DropDownList : System.Web.UI.WebControls.DropDownList
        {
    
            /// 
    
            /// kill the exception. the exception was raised because the selectedvalue does not exist in the list items, 
    
            /// we do not hope the control throws a "selectedvalue not exist..." exception
    
            /// 
    
            /// 
    
            protected override void PerformDataBinding(System.Collections.IEnumerable dataSource)
    
            {
    
                try
    
                {
    
                    base.PerformDataBinding(dataSource);
    
                }
    
                catch (ArgumentOutOfRangeException ex)
    
                {
    
                    ArgumentOutOfRangeException o = ex;
    
                }
    
            }
    
        }