2010-07-30 8 views
1

내 ASP.NET 응용 프로그램에서 GridView가 있습니다. 이 GridView의 특정 필드에 대해 DropDownList가있는 EditItemTemplate을 추가했습니다. 그러나 필드의 값이 "X"이면 DropDownList 대신 레이블 만 표시하려고합니다. 그렇다면 어떻게 프로그램 적으로 필드 값을 확인한 다음 표시 할 컨트롤을 결정할 수 있습니까?EditItemTemplate에서 사용할 컨트롤을 프로그래밍 방식으로 어떻게 결정할 수 있습니까? (ASP.NET)

여기 내 EditItemTemplate입니다 :

<EditItemTemplate> 

<asp:DropDownList ID="DropDownListLevel_ID" runat="server" 
    DataSourceID="ODSTechLvl" DataTextField="Level_Name" 
    DataValueField="Level_ID" SelectedValue='<%# Bind("Level_ID", "{0}") %>'> 
</asp:DropDownList> 

</EditItemTemplate> 

Level_ID의 값이 "X"인 경우, 내가 사용하려는 : 대신 DropDownList로의

<asp:Label ID="LabelLevel_ID" runat="server" Text='<%# Bind("Level_ID") %>'></asp:Label> 

합니다.

Eval ("Level_ID")을 확인하기 위해 DropDownList 앞에 if 문을 삽입하려고 시도했지만 작동하지 않는 것 같습니다. 이견있는 사람?

답변

0

다음은 ASP.Net에서 사용할 수있는 기능입니다.

당신이 RowDataBound 이벤트를 생성하고 라벨 또는 DropDownList로

<asp:GridView id="thingsGrid" runat="server" OnRowDataBound="thingsGrid_RowDataBound" 

...> 을 숨길 수 ...

뒤에 코드에서

:

protected void thingsGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      var boundData = e.Row.DataItem; 
      ... 
      if (boundDataMeetsCondition) 
      { 
       e.Row.Cells[4].FindControl("editThingDropDownList").Visible = false; 
       e.Row.Cells[4].FindControl("editThingLabel").Visible = true;//* 
      } 
      else 
      { 
       ...  
      } 
     } 
} 

* 이것은 셀 인덱스를 하드 코딩하기 때문에 이상적이지 않으며 컨트롤의 ID는 런타임까지 검사하지 않을 문자열입니다. asp.net mvc에서이 문제를 해결하는 훨씬 더 우아한 방법이 있습니다.

OnRowDataBound는 눈금, 페이지 메서드 및 전체 응용 프로그램에 대한 전체 액세스 권한을 제공하는 슬레지 해머입니다. 매우 간단한 시나리오에서는 코드 숨김을 포함시키지 않고 인라인으로 처리 할 수도 있습니다. 첫 번째 인라인 방식의

<asp:Label ID="Label1" runat="server" Visible='<%# Eval("PropertyInData").ToString()=="specialValue"%>' Text='<%# Eval("PropertyInData") %>'></asp:Label> 

<asp:Label ID="Label1" runat="server" Visible='<%# Convert.ToBoolean(Eval("BooleanPropertyInData"))%>' Text='<%# Eval("PropertyInData") %>'></asp:Label>       

또는

는, 데이터 소스는 속성을 노출해야하고, 두 번째에 당신은 또한 당신의 프리젠 테이션으로 specialValue 비즈니스 로직을 코딩 어렵다 추악하고 유지 보수에 문제가 발생할 것입니다.

1

이 시도 :

<EditItemTemplate> 

<asp:DropDownList ID="DropDownListLevel_ID" runat="server" 
    DataSourceID="ODSTechLvl" DataTextField="Level_Name" 
    DataValueField="Level_ID" SelectedValue='<%# Bind("Level_ID", "{0}") %>' 
    Visible='<%# Eval("Level_ID") != "X" %>'> 
</asp:DropDownList> 

<asp:Label ID="LabelLevel_ID" runat="server" Text='<%# Bind("Level_ID") %>' 
    Visible='<%# Eval("Level_ID") == "X" %>'></asp:Label> 

</EditItemTemplate> 
관련 문제