2009-12-22 5 views
1

부서 이름과 약어를 표시하는 데 사용하는 RadComboBox가 있습니다. 나는 각 항목을 만들기 위해 LinqDataSource와 아이템 템플릿을 사용하고로 표시 :RadComboBox를 사용하는 조건부 항목 템플릿

DeptAbbr - 여기

내가이 일을 사용하고있는 코드이고 잘 작동 (DEPTNAME) :

<telerik:RadComboBox ID="rcbDepartments" runat="server" AppendDataBoundItems="True" 
     OnInit="rcbDepartments_Init" DataTextField="DepartmentAbbr" AutoPostBack="True" 
     DataSourceID="ldsDepartments" DataValueField="DepartmentID" HighlightTemplatedItems="true" 
     NoWrap="true" Width="250px"> 
     <ItemTemplate> 
      <div> 
       <b> 
        <%# Eval("DepartmentAbbr")%></b><%# Eval("DepartmentName", " - ({0})") %> 
      </div> 
     </ItemTemplate> 
    </telerik:RadComboBox> 

내 질문은 이것입니다. "All Departments"에 대한 목록에 초기 항목을 추가하고 기본 항목입니다. 이 작업을 쉽게 수행 할 수 있지만 문제는 데이터베이스에 "All Departments"항목을 저장하지 않기 때문에 콤보 상자를 당길 때 템플리트가 항목 목록의 시작 부분에 빈 공간을 표시한다는 것입니다 . 목록에있는 첫 번째 항목을 제외하고 모두 템플릿을 만들 수있는 방법이 있는지 알아 내려고합니다. 희망은 그 말이 맞습니다. 어떤 도움이라도 대단히 감사합니다.

참고 :

<b><%# (Eval("DepartmentAbbr") != null) ? Eval("DepartmentAbbr") : "All Departments" %></b><%# Eval("DepartmentName", " - ({0})") %> 

을하지만 그것은 단지 내가 수동으로 고집하고 초기 항목 바인딩과하지 않은 항목에 대한 평가 : 나는 또한 시도는이 같은 평가에서 조건부을한다. 나는 위의 문을 변경하는 경우 즉, 일하기 :

<b><%# (Eval("DepartmentAbbr") == null) ? Eval("DepartmentAbbr") : "All Departments" %></b><%# Eval("DepartmentName", " - ({0})") %> 

그럼 난 그냥 하나 개의 빈 상단의 항목 "모든 부서"을 읽어 나머지 목록을 얻을.

이 문제를 해결하려면 LINQ 서버 측에서 약간의 펑키 한 선택 작업을 수행해야하지만, 모든 템플릿 작업과 HTML 서식을 없애야합니다. 정말 멋지게 보이기를 원합니다 :) hehe .

답변

1

<Items> 컬렉션에서 '모든 부서'RadComboBoxItem을 정적 항목으로 정의 할 수 있습니다. AppendDataBoundItems 속성을 활성화 했으므로 컨트롤이 이미 정적 항목을 바인딩 한 후에야 데이터 소스에 바인딩 할 수 있습니다. 그렇지 않으면 콤보 상자를 확장 할 때보고있는 빈 공간이 생깁니다. 또한 DataBinder.Eval(Container, "Text")을 사용하여 DepartmentAbbr 필드를 렌더링하십시오. 이 필드를 컨트롤의 DataTextField으로 설정했기 때문에이 값은 항상 렌더링됩니다. 그렇지 않은 경우 DepartmentAbbr이 무엇인지 모르기 때문에 컨트롤이 정적 항목에 바인딩되면 다시 빈 공간이 생깁니다. 텍스트 필드 만 있습니다. 다음은 가야 할 예입니다.

<telerik:RadComboBox ID="RadComboBox1" runat="server" 
    AppendDataBoundItems="True" 
    DataTextField="Abbr" 
    AutoPostBack="True" 
    DataValueField="DeptID" 
    HighlightTemplatedItems="true" 
    NoWrap="true" 
    Width="250px"> 
    <Items>     
     <telerik:RadComboBoxItem runat="server" Text="All Departments" /> 
    </Items> 
    <ItemTemplate> 
     <div> 
      <b><%# DataBinder.Eval(Container, "Text")%></b><%# Eval("Name", " - ({0})") %> 
     </div> 
    </ItemTemplate> 
</telerik:RadComboBox> 

public partial class _Default : System.Web.UI.Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     RadComboBox1.Load += new EventHandler(RadComboBox1_Load); 
    } 

    protected void RadComboBox1_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      // Ensure the static items are already bound before assigning 
      // new data to the DataSource property 
      RadComboBox1.DataBind(); 

      var departments = new[] { 
       new { DeptID = 1, Abbr = "ACME", Name = "ACME Corporation" }, 
       new { DeptID = 2, Abbr = "MSFT", Name = "Microsoft Corporation" }, 
       new { DeptID = 3, Abbr = "GOOG", Name = "Google, Inc" } 
      }; 
      RadComboBox1.DataSource = departments; 
      RadComboBox1.DataBind(); 
     } 
    } 
} 

희망 하시겠습니까?