2010-05-26 2 views
15

드롭 다운에 표시 할 목록의 두 필드를 연결하려고합니다. 다음은 사용하려는 코드입니다. 나는 내 제품의 모델을 바꾸고 싶지 않아 아래에서 그런 것을하려고 시도했지만 연결 된 필드를 가진 내 자신의 객체를 만들지 않고서는 아무 것도 이해할 수 없다.두 개의 필드를 연결하여 드롭 다운 목록 표시

  skuDropDown.DataSource = List<product> 
      skuDropDown.DataTextField = "ProductId" // want to combine with"Description"; 
      skuDropDown.DataValueField = "ProductId"; 
      skuDropDown.DataBind(); 

어떤 아이디어라도 도움이 될 것입니다.

+0

다른 옵션은 없지만 도메인을 확장 하시겠습니까? –

답변

26

주어진 방법으로 원본을 할당하려면 LINQ를 사용하여 원하는 속성으로 익명 형식을 만들어야합니다. 비슷한 것

List<Product> products = new List<Product>(); 
products.Add(new Product() { ProductId = 1, Description = "Foo" }); 
products.Add(new Product() { ProductId = 2, Description = "Bar" }); 

var productQuery = products.Select(p => new { ProductId = p.ProductId, DisplayText = p.ProductId.ToString() + " " + p.Description }); 

skuDropDown.DataSource = productQuery; 
skuDropDown.DataValueField = "ProductId"; 
skuDropDown.DataTextField = "DisplayText"; 
skuDropDown.DataBind(); 
+0

감사합니다.이 기능은 일단 내가 좋아하는 것이 매력이라면 좋았습니다. – Locke12

0

제품을 확장하는 새 클래스를 만들고 ProductID와 Description의 연결된 값을 반환하는 새 속성이 들어있는 확장 클래스로 List 내용을 캐스팅합니다.

나는 OTOMH가 작동한다고 생각합니다.

제품 구조를 변경하고 싶지 않기 때문에 확장 클래스를 제안한 것입니다. 하지만 afaik는 객체의 필드에 바인딩하지 않으면 불가능합니다.

0

데이터 바인딩을 사용하는 경우 DataTextField는 데이터 소스의 필드 이름이어야합니다.

당신이 할 수있는 한 가지는 드롭 다운 목록을 바인딩 한 후 텍스트 속성을 수정 한 후 항목을 반복하는 것입니다. 데이터 객체에 연결된 필드를 가져 오는 것 외에는 할 수 없습니다. 목록을 통해

List<Product>.ForEach(
    x => skuDropDown.Items.Add(
    new Item(x.ProductId + " " x.ProductDescription, x.ProductId) 
); 

그냥 루프를 드롭 다운 목록에 각 항목을 추가

1

당신은이 작업을 수행 할 수 있습니다. 그것은 당신의 예제에서 장면 뒤에 .net 당신을 위해 무엇을 할 것입니다.

0

당신이해야 할 일은 제품의 .ToString() 메소드를 덮어 쓰기 만하면됩니다.

public override string ToString() 
{ 
    return ProductID + " " + ProductDescription; 
} 

그러면 드롭 다운에 바인딩 만하면됩니다. 내 이해에서, 드롭 다운 lables 바인딩 된 컬렉션에 개체의 tostring() 바인딩 된 ar.

즉, 이렇게하십시오.

List<Product> products = new List<Product>();  
products.Add(new Product() { ProductId = 1, Description = "Foo" });  
products.Add(new Product() { ProductId = 2, Description = "Bar" });  

var productQuery = products.Select(p => new { ProductId = p.ProductId, DisplayText = p.ProductId.ToString() + " " + p.Description });  

skuDropDown.DataSource = productQuery;  
skuDropDown.DataBind(); 
4

당신이 제품을 나타내는 클래스가있는 경우, 당신의 클래스를 확장 속성을 만들고 예를 들어, 결합 돌려 : 당신의 데이터 바인딩 드롭 다운에,

 public string ID_Description { 
      get 
      { 
       return string.Format("{0} ({1})", Name, ProductId); 
      } 
     } 

을하고 속성을 참조

skuDropDown.DataSource = productQuery;  
skuDropDown.DataValueField = "ProductId";  
skuDropDown.DataTextField = "ID_Description";  
skuDropDown.DataBind();