عرض عدد النتائج في gridview على أساس القائمة المنسدلة؟

StackOverflow https://stackoverflow.com/questions/417988

سؤال

ولدي DataTable والتي ترجع حوالي 30،000 السجلات. أنا عرض هذه السجلات في ASP: تحكم GridView. لدي عنصر تحكم القائمة المنسدلة التي أريد المستخدم لتكون قادرة على تحديد عدد السجلات التي تريد عرضها في GridView. يجب أن يكون الافتراضي جميع، ولكن يمكن أن يكون أيضا القيم مثل 20، 50، 100 على سبيل المثال. أنا لست متأكدا تماما من كيفية القيام بذلك.

وماذا لو لم يكن لديك ترحيل قيد التشغيل. سوف حجم الصفحة لا تزال تعمل؟

وأنا ضمني GridView.PageSize = 1 وأنه لا يزال إرجاع كافة السجلات.

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

المحلول

إذا كنت تريد أن حجم الصفحة ويعمل لك على هل لديك لوضع AllowPaging من GridView لصحيح. ومن الواضح أن لديك لإنشاء طريقة لإدارة PageIndexChanging الحدث.

ومثل هذا:

protected void myGvw_OnPageIndexChanging(object sender, GridViewPageEventArgs e) 
{
     myGvw.PageIndex = e.NewPageIndex;
     // then recall the method that bind myGvw
}

والقائمة المنسدلة يمكن أن يكون لها AutoPostBack الملكية تعيين إلى صحيح وعلى بلده OnSelectedIndexChanged يجب عليك تعيين

myGvw.PageSize = Convert.ToInt32(myDropDown.SelectedValue)

نصائح أخرى

استخدم خاصية حجم الصفحة من gridview. .

ويمكنك إضافة قيمة القائمة المنسدلة (20، 50، 100) على استفسارك بحيث يمكنك فقط اختيار أعلى (20، 50، 100) السجلات.

هل أنت ذاهب إلى استخدام الترحيل كذلك؟

ينبغي دائما أن تعالج

وترحيل مع أقرب وقت ممكن في اختيار البيانات. كنت لا تريد لاسترداد 30000 السجلات من DB إلى خادم التطبيق لثم تظهر فقط 50 منهم.

وشيء من هذا القبيل: (لاختيار الصفحة 3، 50 في الصفحة)

select top 50 from x where pk not in (select top 100 pk from x)

والذي يترجم على النحو التالي:

CREATE PROCEDURE sspGetItems (@pageSize int, @pageNum int)
AS
SELECT TOP @pageSize 
FROM x
WHERE pk NOT IN 
(
 SELECT TOP (@pageNum - 1) * @pageSize pk FROM x
)

وسوف تحتاج المزيد من الواضح الرعاية التي يجب اتخاذها حول فرز الخ.

وهنا ما أود القيام به. أولا، أود أن أضيف عمود إلى DataTable التي من شأنها أن تكون بمثابة عداد إذا لم يكن هناك بالفعل. بعد ذلك، يمكنك ربط GridView الخاص بك إلى DataView. وإليك بعض رمز لإثبات ما أتحدث عنه:

            //add column with counter
            table.Columns.Add("counter", typeof(int));
            for (int i = 0; i < table.Rows.Count; i++)
            {
                table.Rows[i]["counter"] = i+1;
            }

وبعد ذلك، احصل على العرض الافتراضية من DataTable ووتعيين RowFilter:

            DataView view = table.DefaultView;
            view.RowFilter = "counter <= 100"; //or whatever number the user selected

وأخيرا، مجرد ربط GridView لفي DataView مباشرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top