2012-12-20 39 views
0

另一個列表複製下拉列表創建一個數據層方法從與DataTextField和DataValueField

public static List<SegmentBL> GetAllSegment(string SortDirection, string SortExpression) 
    { 

     var ds = DBHelper.GetDatabase().ExecuteDataSet("UDS_Select_SegmentMaster"); 

     var val = ds.Tables[0].AsEnumerable().Select(r => new SegmentBL 
     { 
      _SegmentId = Convert.ToInt32(r[0].ToString()), 
      _SegmentName = r[1].ToString() 
     }); 
     List<SegmentBL> list = val.ToList(); 
     return list; 
    } 

從我創建一個經營業務邏輯方法

public DropDownList GetAll(string SortDirection, string SortExpression) 
    { 
     var list = new DropDownList(); 
     list.DataSource = SegmentDL.GetAllSegment(SortDirection, SortExpression); 
     list.DataTextField = "_SegmentName"; 
     list.DataValueField = "_SegmentID"; 
     list.DataBind(); 
     ListItem item = new ListItem(); 
     item.Text = "--Select--"; 
     item.Value = "0"; 
     list.Items.Insert(0, item); 
     return list; 
    } 

最後表示層的方法用於填充下拉列表

private void FillSegment() 
    { 
     ddlSegment.DataSource = seg.GetAll(General.SortAscending,"SegmentID").Items; 

     ddlSegment.DataBind(); 
     ddlSegment.DataTextField = "_SegmentName"; 
     ddlSegment.DataValueField = "_SegmentID"; 
    } 

它工作正常,除了DataTextField和DataValueField否正確分配。目前DataTextField和DataValueField是相同的。在上面的代碼中我犯了什麼錯誤。

+0

不確定業務邏輯是否應該創建UI元素 - 您可以將數據源項返回到表示層。嘗試並將相同的東西綁定兩次似乎不合邏輯。 – iandayman

+0

因爲我在應用程序中使用的同一行代碼超過20次。 –

回答

1

在將元素添加到數據源綁定之前,您正在綁定元素被添加之後。您可以將pass下拉列表中的GetAll方法的方法intead創建本地下拉列表。

public DropDownList GetAll(string SortDirection, string SortExpression, DropDownList list) 
{ 
    // var list = new DropDownList(); //Remove this line 
    list.DataSource = SegmentDL.GetAllSegment(SortDirection, SortExpression); 
    list.DataTextField = "_SegmentName"; 
    list.DataValueField = "_SegmentID";  
    ListItem item = new ListItem(); 
    item.Text = "--Select--"; 
    item.Value = "0"; 
    list.Items.Insert(0, item); 
    list.DataBind(); 
    return list; 
} 
+0

嘿,我需要通過那裏ref DropDownList List作爲參數。 –

1

移動Databind()行。

private void FillSegment() 
    { 
     ddlSegment.DataSource = seg.GetAll(General.SortAscending,"SegmentID").Items; 


     ddlSegment.DataTextField = "_SegmentName"; 
     ddlSegment.DataValueField = "_SegmentID"; 

     ddlSegment.DataBind(); //After and not before defining the fields value 
    } 
相關問題