2011-09-07 2 views
0

linqdatasource 및 gridView가있는 페이지가 있습니다. 검색 조건을 입력 할 수있는 텍스트 상자가 여러 개 있습니다.linqDataSource에서 검색 할 때 2 번의 클릭이 필요합니다.

var query = from d in db.PersonData 
      select d; 

if (textBoxName.Text != "") 
    var query = query.where(p => p == textBoxName.Text); 

if (textBoxPhone.Text != "") 
    var query = query.where(p => p == textBoxPhone.Text); 

e.Result = query; 

그리고 btnSearch_Click 이벤트는 다음과 같은 코드가 있습니다 : LinqDataSource_OnSelecting 이벤트는 다음과 같이하여 쿼리를 필터링

gridView.DataBind(); 

그것은 꽤 좋은 대부분의 시간을 작동을하지만, 때로는 두 번에 검색 버튼을 클릭해야 결과를보십시오. 처음으로 검색을 클릭하면 gridView가 비어 있습니다! 두 번째로 올바른 결과를 얻었습니다. 가끔 그 이유가 무엇인지 명확히 설명하기를 바랍니다. 감사합니다.

+0

당신이 당신의 버튼 이벤트를 클릭 처음으로 발사되고 있음을 확인 했습니까? 어딘가에 잡는 중 오류가 있습니까? – Hammerstein

+0

오류가 없습니다. 내가 이해하지 못하는 것은 대부분의 시간 검색이 필요한만큼 작동한다는 것입니다. 사실 나는 이와 비슷한 문제가있다 : [link] (http://www.eggheadcafe.com/community/aspnet/7/10070097/search-on-linq-datasource-not-working-correctly.aspx) 그러나 거기 이 사이트에서 내 문제에 대한 해결책이 아닙니다. – Saibot

답변

1

Gridview-Datasource을 수동으로 바인딩하고 사용하지 않는 경우 dataset 페이지로드시 항상 Gridview-Datasource을 바인딩해야합니다.

웹 (asp.net)에서는 Win-app와 다르며 페이지로드 이벤트없이 데이터 소스를 그리드에 바인딩 할 수 없습니다.

As solution: 당신은 Updatepanle을 사용할 수 있다는 점에서 그리드를 넣어. 바인딩 후 GridName.DataBind()을 사용하십시오.

0

공백 만 표시되는 가장 큰 이유는 사용자가 검색을 통해 결과를 얻을 수있는 페이지에 있다는 것입니다.

예. : 필터링하지 않은 결과의 10 페이지에있는 경우 Search,을 누르고 5 페이지 분량의 결과 만 가져옵니다. 따라서 현재보고있는 페이지 (10)는 비어 있습니다.

LINQ 문이 완료되면 GridView을 첫 번째 페이지로 다시 설정해야합니다.

두 번째 (가능한) 문제는 모든 이벤트 처리기의 순서를 보장 할 수 없다는 것입니다. (Page Life Cycle 참조) 즉,이면 LinqDataSource_OnSelecting 또는 btnSearch_Click이 먼저 실행되며 은 Click 처리기에 포함됩니다. 확실히 LinqDataSource.OnSelecting 후 발생되는 대신,btnSearch_Click 이벤트 핸들러를 제거 (또는 비워 둡니다) 및 LinqDataSource.OnSelected를 사용

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e) { 
    gridView.DataBind(); 
    gridView.PageIndex = 0; // back to beginning when searching 
} 
관련 문제