2011-04-08 12 views
0

일부 항목을 표시하기 위해 gridview를 사용하는 ASP 페이지가 있습니다. 표보기를 데이터베이스의 테이블에 바인드했습니다. 문제는 where 절을 기반으로 표시 할 내용을 필터링하려고하는 것입니다.GridView where 절

<asp:LinqDataSource ID="ItemsDataSource" runat="server" ContextTypeName="Database.MyDataContext" TableName="ItemDetails" OnSelecting="ItemSourceSelecting" Where="ID == @ID" > 

는 여기에 내 ItemSourceSelecting

protected void ItemSourceSelecting(object sender, LinqDataSourceSelectEventArgs e) 
{ 
    if (!IsPostBack) 
     e.WhereParameters.Add("ID", ID); 
} 

페이지 내가 그것을에 가서 처음로드 할 때이 좋은 작품이다. 문제는 GridView에 10 개의 항목 만 표시하고 페이지 번호가 아래에 있다는 것입니다. 다른 페이지를 보려고하면 데이터베이스의 모든 것을 다시 가져오고 ItemSourceSelecting을 호출하지 않습니다. 이런 일이 일어나지 않도록 다른 장소 나 방법이 있습니까?

편집 : 하드 코드 Where = "ID == 1"LinqDataSource 태그에서 잘 작동합니다. 페이지를 변경할 때 ItemSourceSelecting을 호출해야하지만 그렇지 않은 것 같습니다. 어떻게 든 where 절은 페이지가 변경 될 때 버려지고있다.

+0

컨트롤과 같이 에 변수를 추가 할 수있는 방법이 있습니까? – thecaptain0220

답변

0

이것이 저에게 효과적입니다. OnSelecting 이벤트를 제거하고 내 Page_Load에 추가했습니다.

if (!IsPostBack) 
{ 
    Parameter p = new Parameter("ID", DbType.Int32, ID.ToString()); 
    this.AssetsDataSource.WhereParameters.Add(p); 
} 
+0

이것은 완전히 사실이 아닙니다. 나중에 잘못된 인수가있는 where 절을 일으키는 코드에서 다른 곳에서 지워지는 ViewState 변수에 의존하고 있음을 알았습니다. – thecaptain0220