2012-04-02 3 views
2

다음과 같은 드롭 다운 목록 상자가 있습니다. 어떤 상황에서 databound 이벤트에서 bitActive가 0 (비활성)으로 설정된 항목을 제거하려고합니다. selectCommand에 where bitAcive! = 0을 넣지 않았습니다. 일부 조건에서만 제거하기를 원하기 때문입니다. 항목을 반복하고 bitActive의 값을 확인할 수있는 방법이 있습니까?ASP.net에서 열 이름을 기반으로 ListItem을 가져 오는 방법은 무엇입니까?

코드 숨김에서
<tr> 
      <td width="30%" align="right">Location<span class="littlefont">*</span></td> 
      <td width="70%" align="left"> 
       <asp:DropDownList ID="ddlLocation" runat="server" 
        DataSourceID="SqlDSLocation" DataTextField="txtRefLocation_Name" 
        DataValueField="intRefLocation_ID" ondatabound="ddlLocation_DataBound"> 
       </asp:DropDownList> 
       <asp:SqlDataSource ID="SqlDSLocation" runat="server" 
        ConnectionString="<%$ ConnectionStrings:SPRConnectionString %>" 
        SelectCommand="SELECT DISTINCT [intRefLocation_ID], [txtRefLocation_Name], [location], [bitActive] FROM [tblRefLocation] ORDER BY [intRefLocation_ID]"> 
       </asp:SqlDataSource> 
      </td> 
     </tr> 

답변

1

당신이 SQLDataSource.Select() 메서드를 호출 할 수 있습니다

System.Data.DataView dv = (System.Data.DataView)SqlDSLocation.Select(DataSourceSelectArguments.Empty); 

을 그리고 행을 반복 0으로 설정되어있는 "bitActive"행을 발견하고 DropDownList (코드에서 제거, 반환 일종의 위에 링크의 예)에서 해킹이 당신의 SQL 테이블에서 이러한 행이 제거되지 않습니다 것을

foreach(System.Data.DataRow row in dv.Table.Rows) 
{ 
    // This is approximate logic, tailor this to fit your actual data 
    if (row["bitActive"].ToString() == "False") 
    { 
     ddlLocation.Items.Remove(row["intRefLocation_ID"].ToString()); 
    } 
} 

참고. 이 후에 다시 DropDownList을 데이터 바인딩하지 않도록하십시오. 그렇지 않으면 방금 제거한 모든 항목이 반환됩니다.

편집 :보다 효율적이고 세련된 솔루션을 보려면 James Johnson's answer을 참조하십시오. 대신 ItemDataBound 이벤트의 항목을 제거

+0

포스터의 답변을 비판하지? : 바인딩하기 전에 데이터 소스를 필터링하지,하지만이 문제를 해결하기위한 효율적인이나 우아한 방법도 있습니다 ... –

+1

@JamesJohnson 아니요, 비판적으로 들리는 것은 아닙니다 * 모든 대답은 +1입니다. 매우 우아합니다! – jadarnel27

+1

OP가 이미 사용하고있는 구현 방식을 고수했기 때문에 실제로 비판하지 않았습니다. 더 효율적인 방법이 있다는 것을 지적하고있었습니다. 나는 당신이 솔리드 한 코드를 게시하는 것을 보았 기 때문에 당신이 당신을 사소한 것으로 생각하지 않기를 바란다. –

1

, 왜 그냥

var table = new DataTable("MyTable"); //assume it's populated 
if (table.Rows.Count > 0) 
{ 
    var results = table.AsEnumerable().Where(r => r.bitActive).AsDataView().ToTable(); 
    if (!results.HasErrors) 
    { 
     DropDownList1.DataSource = results; 
     DropDownList1.DataBind(); 
    }   
} 
관련 문제