문제

DataSourceId 속성이 사용자 정의 ObjectDatasource 객체에 설정된 GridView가 있습니다. 허용 페이징이 True로 설정되면 Postback 후에 GridView가 사라집니다. 허용을 허용으로 설정하면 괜찮습니다. 누군가 나를 위해 이것에 대해 약간의 빛을 비출 수 있습니까? :)

편집하다: 내가 혼란스러워하는 또 다른 것은 당신이 설정하면 DataSourceid 그리드가 필요할 때마다 데이터 소스에서 데이터를 얻을 수 있습니다. 그리드가 데이터를 보유하지 않기 때문에 사라지는 경우 GridView가 데이터 소스에서 필요한 데이터를 얻지 못하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

Postback이 발생한 후 데이터 소스가 유지되거나 리필되지 않고 그리드를 채울 항목이 없을 수 있습니다. 페이징이 활성화 될 때 DataSource 객체 (소스를 다시 반드/유지)에 대해 상태를 올바르게 처리하고 있습니까?

이것은 모호한 대답처럼 들릴지 모르지만 소스가 데이터를 어떻게 얻는 지에 대한 예가 없으면 항목이 사라지는 이유를 진단하기가 어렵습니다.

편집하다:
내가 생각했던 방법은 콜백 페이징/분류였습니다. 그러나 나는 그가 ODS & 페이징에 대한 정보를 찾았습니다. 다음을 설정했는지 확인하십시오.

  1. GRIDVIEW : 허용 페이징 및 꺼짐 코스를 설정해야합니다.
  2. ObjectDatasource : 활성화, 또한 다음을 설정해야합니다.
    • maximumrowsparametername = "maxrows"
    • StarTrowIndexParameterName = "StarTrowIndex"
    • selectCountMethod = "RecordCount"

페이징 크기 등을 수동으로 처리하려는 경우 항목 2의 3 개의 하위 항목 만 설정하면됩니다.

그런 다음 이것에 대해 더 많이 읽을 수 있습니다 여기.

다른 팁

@adam0101의 응답에 대한 답변을 위해 제 생각에는 그는 "... 내 맞춤형 데이터 소스가 돌아 왔다는 것을 의미합니다. 레코드 카운트의 경우 0입니다. ", 당신은 필요할 수 있습니다.다시 항구"GridView에 대한 DataSource. ASP.NET은 다음 페이지의 다음 첫 번째 행입니다.이 솔루션은 허용하지 않는 경우에 더 많은 것입니다. asp.net to 데이터를 자동으로 처리합니다 GridView에서는 아마도 다른 이벤트 후 데이터로드 (예 :로드 데이터 버튼)와 페이지가 처음로드 된 경우가 아니라는 것입니다. 그러나 Adam이 아래에 언급했듯이 실제 이유는 "... ObjectDatasource를 물려받은 데이터 소스 서브 클래스를 만들었지 만 잘못 구현되었습니다." 내 가정에 대해 죄송합니다. 아담. 감사

그러나 내 솔루션의 나머지 부분은 수동 도출 된 데이터 소스를 사용하는 데 걸리는 사람들에게 적합 할 것이라고 생각합니다.

위의 gridview를 위에 따라 설정하고 데이터 소스 속성없이 참고하십시오! 내 예는 다음과 같습니다.

     <asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server" 
            ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">

다음으로 그리드 뷰를 새 페이지로 강제해야 할 때 전화 할 수있는 개인 방법이나 루틴을 만드십시오.

private void BindGridViewServer(GridView gv1)
{
    gv1.DataSource = sdsStudents;   //re-attach the datasource
    gv1.DataBind();                 //get a page of data AllowPaging must be true
}

다음으로, OnPageIndexChanging 방법:

protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView myGV = (GridView)sender;
    myGV.PageIndex = e.NewPageIndex;
    BindGridViewServer(myGV);
}

이 답변을 완료하기 위해, 여기에 내가 원할 때 데이터를로드하는 코드가 있습니다. 스포츠가 발사 될 때가 아니라 기본값입니다 ...

    protected void btnSEARCH(object sender, EventArgs e)
        {
//some code
                    //bind the gridview to the datasource here and then bind!
                    gvStudents.DataSource = sdsStudents;
                    gvStudents.DataBind();
//more code etc
        }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top