سؤال

لدي GridView يحتوي على خصائص DataSourceID الخاصة به إلى كائن ObjectDatasource مخصص. عند تعيين البديهة إلى True، يختفي GridView بعد إعادة النشر. إذا قمت بتعيين Anglingpaging false فلا بأس. يمكن للشخص يلقي بعض الضوء على هذا بالنسبة لي؟ :)

يحرر: الشيء الآخر الذي أقيم فيه هو اعتقدت أنه إذا قمت بتعيين DataSourceD. أن الشبكة ستحصل على بيانات من DataSource كلما احتجت إليها. إذا تختفي الشبكة لأنه لا يحتفظ بالبيانات، فلماذا لا تحصل GridView على البيانات التي تحتاجها من DataSource؟

هل كانت مفيدة؟

المحلول

من الممكن أنه بعد حدوث عملية إعادة النشر، لا يتم الحفاظ على البيانات DataSource أو إعادة تعبئتها ولا توجد عناصر لملء الشبكة. هل يمكنك التعامل مع الحالة بشكل صحيح لكائن DataSource (Rebinding / إبقاء المصدر على قيد الحياة) عند تمكين الترحيل؟

هذا قد يبدو وكأنه إجابة غامضة، ولكن دون مثال على كيفية الحصول على المصدر البيانات، فمن الصعب تشخيص سبب انتهاء العناصر.

يحرر:
الطريقة التي كنت أفكر فيها هي لترحيل الترحيل / الفرز. ومع ذلك، وجدت بعض المعلومات ont هو ODS والترفيه .. تأكد من تعيين ما يلي:

  1. GRIDVIEW: المسار الصحيح والطرق تحتاج إلى تعيين التلصر.
  2. ObjectDatasource: تمكين، كما تحتاج أيضا إلى ضبط:
    • MulmiterRowsParametername = "MaxRows"
    • startrowindexparametername = "startrowindex"
    • SelectCountMethod = "RecordCount"

أعتقد أنك تحتاج فقط إلى تعيين العناصر الفرعية 3 من البند 2 إذا كنت ترغب في التعامل مع حجم الترحيل، وما إلى ذلك يدويا.

ثم يمكنك قراءة المزيد عن هذا هنا.

نصائح أخرى

للإجابة على استجابة أكثر من @ ADAM0101، ماذا أظن إنه يعني "... اتضح أن بيانات DataSource المخصصة كانت تعود صفر لعدد السجل. "، هل قد تحتاج إلى"إعادة إرفاقها"DataSource to GridView. تعرف ASP.NET تلقائيا أنك تسحب سجل السجل"، حيث "n" هو الصف الأول التالي من الصفحة التالية. هذا الحل هو أكثر للحالات التي لا تريد السماح بها asp.net إلى التعامل مع البيانات تلقائيا في GridView الخاص بك، ربما بسبب الرغبة في تحميل البيانات بعد حدث آخر (زر بيانات التحميل على سبيل المثال)، وليس عند تحميل الصفحة لأول مرة. ولكن كما ذكر آدم المذكورة أدناه السبب الحقيقي هو أنه "... أنشأ فرقة فرعية بيانات البيانات التي ورثت enjorydatasource، ولكن تم تنفيذها بشكل غير صحيح". آسف لافتي هناك آدم. شكرا

ومع ذلك، فإن ما تبقى من حلاي أعتقد أنه سيعمل على عالقة في استخدام مصادر البيانات المشتقة يدويا.

بمعنى آخر

قم بتعيين GridView الخاص بك حسب أعلاه، ولاحظ - بدون خاصية DataSource! هنا مثالي:

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

بعد ذلك قم بإجراء طريقة خاصة أو روتينية خاصة يمكنك الاتصال بها عندما تحتاج إلى إجبار GRIDVIEW على صفحة جديدة.

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);
}

من أجل إكمال هذه الإجابة، إليك التعليمات البرمجية الخاصة بي حيث أقوم بتحميل البيانات عندما أريد - ليس عند إطلاق PostPack، وهو الافتراضي ...

    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