PDA

View Full Version : سوال: مشکل در ستون ردیف



a_123123123123
دوشنبه 20 تیر 1390, 00:45 صبح
سلام
من از دستور زیر برای ایجاد ریف استفاده میکنم

Protected Sub grid_user_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles grid_user.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
'row index
'e.Row.Cells[1]
If ViewState("PageIndex") Is Nothing Then
e.Row.Cells(0).Text = (e.Row.RowIndex + 1).ToString()
Else
Dim page As Integer = Convert.ToInt32(ViewState("PageIndex"))
e.Row.Cells(0).Text = (10 * (page) + e.Row.RowIndex + 1).ToString()
End If
End If
End Sub


حالا وقتی از صفحه دوم میام میام به صفحه اول به جای اینکه از یک شروع بشه از 11 شروع میشه و صفحه دوم از یک
ممکنه بگید اشکالش کجاست تا من درستش کنم
اگر کد درتشم لطف کنید که خیلی محبت کردید
ممنون از لطفتون

mehdi.mousavi
دوشنبه 20 تیر 1390, 01:03 صبح
سلام.
شما نیازی نیست تا در کد این مساله رو Handle کنید. میتونید در فایل ASPX خودتون، در ItemTemplate مورد نظر از GridView، دستور زیر رو بنویسید:

<asp:Label ID="lblRowNr" runat="server" Text='<%# (grid_user.PageIndex * grid_user.PageSize) + (Container.DataItemIndex + 1) + "." %>' />

به این ترتیب شماره Row مورد نظر با توجه به PageSize نمایش داده خواهد شد.

موفق باشید.

a_123123123123
دوشنبه 20 تیر 1390, 02:09 صبح
دوست عزیز منون از راهنماییت
ولی خطای زیر رو میده

Himalaya
دوشنبه 20 تیر 1390, 09:41 صبح
سلام

<asp:Label ID="lblRowNr" runat="server" Text='<%# (grid_user.PageIndex * grid_user.PageSize) + (Container.DataItemIndex + 1) + "." %>' />

به این ترتیب شماره Row مورد نظر با توجه به PageSize نمایش داده خواهد شد
این کد رو تست کردم. Container.DataItemIndex + 1 خودش شماره گزاری رو با توجه به PageIndex و PageSize انجام میده. به نظر میرسه به پرانتز اول احتیاجی نباشه.


دوست عزیز منون از راهنماییت
ولی خطای زیر رو میده

از کد زیر استفاده کن.

<asp:Label ID="lblRowNr" runat="server"><%# Container.DataItemIndex + 1 %></asp:Label>

a_123123123123
دوشنبه 20 تیر 1390, 10:05 صبح
دوست عزیز
اون برنامه ای برام فرستاده بودی رو خاطرت هست؟
که توش میتونستم ویرایش کنم؟
حالا من میخوام از همون تکست باکسا برای اضلفه کردن هم استفاده کنم
میتونم همچین کاری انجام بدم یا نه و باید تکست باکس رو دوباره براش تعریف کنم؟

ممنون میشم راهنماییم کنید

mehdi.mousavi
دوشنبه 20 تیر 1390, 11:07 صبح
سلام

<asp:Label ID="lblRowNr" runat="server" Text='<%# (grid_user.PageIndex * grid_user.PageSize) + (Container.DataItemIndex + 1) + "." %>' />
این کد رو تست کردم. Container.DataItemIndex + 1 خودش شماره گزاری رو با توجه به PageIndex و PageSize انجام میده. به نظر میرسه به پرانتز اول احتیاجی نباشه.

سلام.
DataItemIndex اندیس عنصر رو در DataSource بایند شده به GridView نشون میده. شما فرمودید آزمایش کردید و نتیجه درست بوده. این به این معنی هستش که بدون شک شما دارید کل داده ها رو با هر بار تغییر صفحه از بانک می گیرید، که خوب، طبیعتا در این حالت، DataItemIndex درست محاسبه خواهد شد. اما اگر فقط داده های Page مورد نیاز رو از بانک query کنید، اونوقت خواهید دید که DataItemIndex در هر صفحه از صفر شروع خواهد شد... (و توصیه می کنم حتما اینکارو کنید، چون شما نباید هر بار با تغییر صفحه، فرضا 20000 رکورد رو از بانک بگیرید، به صرف اینکه میخواهید 10 تا رکورد روی صفحه نشون بدید. شما باید حتما همون 10 رکورد رو از بانک دریافت کنید).

@a_123123... اون خطا نیز به این دلیل رخ میده که شما Operand سمت چپ رو به string تبدیل نکرده اید... کد زیر Error ای نمیده، اما اگر قرار باشه هر سری کل داده ها رو از بانک بگیرید نیز بهتون Row# صحیح رو نخواهد داد.

<asp:Label ID="lblRowNr" runat="server" Text='<%# (grid_user.PageIndex * grid_user.PageSize + (Container.DataItemIndex + 1)).ToString() + "."%>' />


موفق باشید.

Himalaya
دوشنبه 20 تیر 1390, 13:44 عصر
سلام.

DataItemIndex اندیس عنصر رو در DataSource بایند شده به GridView نشون میده.
درسته اصلا حواسم به این مورد نبود. قصدم فقط تست این مورد بود و به خاطر همین از Server Explorer جدول رو درگ کردم رو صفحه

و توصیه می کنم حتما اینکارو کنید، چون شما نباید هر بار با تغییر صفحه، فرضا 20000 رکورد رو از بانک بگیرید، به صرف اینکه میخواهید 10 تا رکورد روی صفحه نشون بدید. شما باید حتما همون 10 رکورد رو از بانک دریافت کنید
تو پروژهای خودم این کار رو انجام میدم ولی اینجا همونطور که گفتم فقط جنبه تست داشت (البته حوصله صفحه بندی اختصاصی هم رو هم نداشتم :لبخندساده:)
مرسی

a_123123123123
دوشنبه 20 تیر 1390, 16:10 عصر
الان درستش چیه؟
من چیکار کنم؟