2013-03-14 2 views
1

GridView에 표시되는 로컬 DB 테이블이 있습니다. 이 표에는 'Completed'라는 열이 있습니다.ASP.NET 데이터 소스 선택 명령

테이블을 처음 표시 할 때 완료된 레코드없이 표시됩니다 (완료 됨 = false).

"SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]"; 

내가 포스트 백을 유발하는 체크 박스가 : 여기 SqlDataSource 선택 명령입니다. 나는 그것을 unticking/똑딱에 의해 완성 된 기록의 표시를 전환 할 : 나는 상자를 검사 할 때

protected void cbShowCompletedRecords_CheckedChanged(object sender, EventArgs e) 
    { 
     if (cbShowCompletedRecords.Checked) 
      CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] ORDER BY [Priority]"; 
     else 
     { 
      CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]"; 
     } 
    } 

는 현재, 나는 모든 기록을 얻을. 그러나 위의 코드를 실행하더라도 선택을 취소하면 GridView이 업데이트되지 않습니다. 내가 누락 된 것? 당신의 체크 박스의 "검사"속성에 따라

<asp:SqlDataSource ID="myds" runat="server" 
    SelectCommand="SELECT * FROM [CERecord] WHERE [Completed]=:COMPLETED ORDER BY [Priority]"> 
    <SelectParameters> 
    <asp:ControlParameter ControlID="MyCheckbox" Name="COMPLETED" PropertyName="Checked" Type="Boolean" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

이것은 당신의 선택 명령을 수정합니다 :

+0

'if..else' 블록 다음에'Rebind' 메소드를 사용해보십시오. 'Grid.Rebind()' – Ron

+0

DB에서 어떤 타입이 완성 되었습니까? 부울 또는 문자열? –

+0

@Ron 당신은'DataBind();'를 의미합니까? – jadarnel27

답변

2

결과에 표시된 if...else 블록

protected void cbShowCompletedRecords_CheckedChanged(object sender, EventArgs e) 
    { 
     if (cbShowCompletedRecords.Checked) 
      CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] ORDER BY [Priority]"; 
     else 
     { 
      CEDatabaseSource.SelectCommand = "SELECT * FROM [CERecord] WHERE [Completed]='false' ORDER BY [Priority]"; 
     } 

     yourGrid.DataBind(); 
    } 

이 있는지 확인합니다 후 GridViewDataBind 방법을 사용하여 시도하여 그리드는 select 문에 대한 변경 사항을 반영합니다.

+0

몇 가지 추가 컨텍스트와 솔루션 설명을 추가했습니다. 최대한 답변을 올리려고 항상 노력해야합니다. 그것은 미래의 방문자가 더 도움이 될 것입니다, 그리고 당신이 더 upvotes = 얻을 수 있도록 =) – jadarnel27

+0

@ jadarnel27 고마워 :) – Ron

1

의 SqlDataSource는 속성을 제어하는 ​​매개 변수를 결합 할 수 있습니다. 완료되면

+0

그건 OP가 찾고있는 논리가 아닙니다. 그들은 모든 기록을 원하거나 완성되지 않은 기록만을 원합니다. ControlParameters에 대한 좋은 지적입니다. – jadarnel27

+0

또한 구문은 약간 펑키합니다. '[Completed] = : COMPLETED'가 작동합니까? 나는 항상 [Completed] = @ COMPLETED'를 사용했습니다. – jadarnel27

+0

@ jadarnel27 : 죄송합니다. 질문을 잘못 읽었습니다. 감사합니다. 그건 그렇고, 나는 항상':'문법을 사용했고 나를 위해 일했다 ... –

-1

는 DB의 비트 유형에 쿼리를 변경할 수 있습니다 :

"SELECT * FROM [CERecord] WHERE [Completed]=0 ORDER BY [Priority]"; 
+0

참/거짓은 실제로 실제로 잘 작동한다. –

+0

이 답변은 실제로 질문에 대답하지 않는다. 그러나 이런 방식으로 @sd_dracula에 쿼리를 작성하는 것이 좋습니다. – jadarnel27

관련 문제