2011-07-29 4 views
1

나는 일하고있는 직원을 위해 청구 비용 신청서를 작성 중입니다. 프로세스의 일부에는 목록보기가 포함되어 있습니다. 새로운 요구 사항의 일부로 비용 유형이 마일리지 인 경우 사용자는 항목을 편집 할 수 없으며 비즈니스 규칙 및 영국 세금 이유 등의 일부로 만 삭제하고 다시 제출할 수 있습니다.같은 유형의 목록보기 항목 템플릿에서 컨트롤 찾기

어쨌든 특정 텍스트 값을 가진 목록 뷰의 각 항목에서 컨트롤을 찾을 수 있기를 원합니다.

다음과 같이 생각했지만 올바르지 않으며 이유를 알고 있습니다.

 Label ExpenseTypeLabel = (Label)Expenses.FindControl("ExpenseTypeLabel"); 
     string ExpenseType = (ExpenseTypeLabel.Text.ToString()); 

     if (ExpenseType == "Mileage") 
     { 
      foreach (ListViewDataItem thisItem in Expenses.Items) 
      { 

       ImageButton btnEdit = (ImageButton)thisItem.FindControl("btnEdit"); 
       btnEdit.Enabled = false; 


      } 
     } 

경비는 weekending을 기반으로하고 (첫 번째로드) 현재 weekending에 대한 비용과 관련된 많은 ExpenseTypeLabels 있기 때문에 그것은 특정 개인 컨트롤에 바인딩 할 수있는 페이지가로드로 내 excepion가 발생합니다.

여기에서 달성하고자하는 것은 항목 템플릿과 교번 항목 템플릿 모두에서 모든 ExpenseTypeLabels를 찾아 해당 비용 항목의 편집 기능을 비활성화하는 것입니다. 참고로 주말 휴가 비용이 궁금 하시며 아이들은 개별 비용 항목입니다.

멋진 사람이이 일을 수행하는 가장 좋은 방법을 알려주시겠습니까?

감사

매트

답변

1

사용 OnItemDataBound 이벤트 바인딩 항목에 액세스

OnItemDataBound="Expenses_ItemDataBound" 

protected void Expenses_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 

    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 

     Label ExpenseTypeLabel = (Label)e.Item.FindControl("ExpenseTypeLabel"); 

     string ExpenseType = (ExpenseTypeLabel.Text.ToString()); 

     if (ExpenseType == "Mileage") 
     { 
      // disable button 
     } 
    } 
} 
+0

V 고맙습니다. – dotnetnewb

+0

네, 맞아요. 맞아요. 맞아요. 제 생각 엔, 제 생각에 맞춰서 요.하지만 제 요구를 충족 시키지는 못합니다. 더 나은 이해를 해줍니다. – dotnetnewb

+0

답을 얻을 수 있습니다 .--) 나는 어떤 이유로 든 버튼을 감미할 수 없었습니다. 단지 보이는 속성을 false로 설정하면 이상하게 느껴진다. 다시 한 번 감사드립니다! – dotnetnewb

2

바인딩 순서 및 타이밍 다음은 매우 중요하다; 바인딩 항목이있는 하위 컨트롤이있는 경우 특히 그렇습니다.

이러한 바운드 컨트롤의 디스플레이에 영향을 미치려면 일반적으로 aspx 끝에서 수행 할 수 있습니다. 그 값을 반환하는 공공 기능을하기 위해선, 서버 측에

<asp:listview id='lstExpense'> 
    ... 
    <asp:button id='btnEdit' enabled='<%#= isEnabled(((Expense)Container.DataItem).ExpenseType) %>' ... 
    ... 
<asp:listview> 

:

서버 끝에 함수에 대한 프론트 엔드에서 링크를 만든 다음 필요한 모든 매개 변수를 전달할


가장 좋은 해결책은 jQuery를 사용하는 것입니다. 과장하지 않고 다음과 같은 간단한 작업으로 모든 작업을 수행 할 수 있습니다.

+0

좋은 입력 감사합니다. 관리자 코드에 의해 AJAX 이외의 클라이언트 측 스크립트를 사용하지 않도록 관리자로부터 조언을 받았습니다. JQuery는 일종의 JS/jQ로 쉽게 할 수있는 많은 질문을 곧 배울 수 있어야합니다. – dotnetnewb

관련 문제