PDA

View Full Version : مشکل در sorting &pageing



h.alizadeh
چهارشنبه 04 اردیبهشت 1387, 00:02 صبح
سلام،

من می خوام در این برنامه ام امکان مرتب سازی و صفجه بندی رو با هم برای دیتاگریدم بزارم.

این کد کامل فایل من هست:

<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<Script Runat="Server">
dim sortstr as string
Sub Page_Load
If Not isPostBack Then
sortstr="nid"
lbl.text=sortstr
BindDataGrid(sortstr)
End If
End Sub
Sub BindDataGrid( strSortField As String )
Dim con As SqlConnection
Dim dad As SqlDataAdapter
Dim dst As DataSet
con = New SqlConnection( "Server=localhost;UID=sa;PWD=sa;Database=Main" )
dad= New SqlDataAdapter( "Select * From news Order By " & strSortField , con )
dst = New DataSet
dad.Fill( dst )
dgrd.DataSource = dst
dgrd.DataBind()
End Sub
Sub dgrd_PageIndexChanged( s As Object, e As DataGridPageChangedEventArgs )
dgrd.CurrentPageIndex = e.NewPageIndex

lbl.text=sortstr 'اینجا مقدارمتغیر رو خالی نشون میده.
sortstr="nid"
BindDataGrid(sortstr)
End Sub
Sub dgrd_SortCommand( s As Object, e As DataGridSortCommandEventArgs )
sortstr=e.SortExpression
lbl.text=sortstr
BindDataGrid( sortstr )
End Sub
</Script>
<html>
<head><title>DataGridPaging.aspx</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
<table dir="rtl" align="center" bordercolor="#FF00CC" border="2"><tr><td>
<form runat="server">
<asp:DataGrid ID="dgrd"
AllowSorting="True"
OnSortCommand="dgrd_SortCommand"
CellPadding="10" AllowPaging="True"
PageSize="3"
OnPageIndexChanged="dgrd_PageIndexChanged"
runat="server" AutoGenerateColumns="false"
>
<HeaderStyle Font-Bold="True" ForeColor="#0000cc" BackColor="LightGrey"></HeaderStyle>
<columns>
<asp:TemplateColumn HeaderText="انتخاب">
<ItemTemplate>
<asp:CheckBox id="Checkbox1" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="nid" SortExpression="nid" HeaderText="شماره ارسال"></asp:BoundColumn>
<asp:BoundColumn DataField="title" SortExpression="title" HeaderText="عنوان"></asp:BoundColumn>
<asp:BoundColumn DataField="matn" SortExpression="matn" HeaderText="متن"></asp:BoundColumn>
<asp:BoundColumn DataField="datesend" SortExpression="datesend" HeaderText="تاریخ ارسال "></asp:BoundColumn>

</columns>
</asp:DataGrid>
<asp:Label ID="lbl" runat="server"/></form></td></tr></table>

</body>
</html>



ببینید من یک زیربرنامه BindDataGrid دارم که موقع مرتب کردن براساس ستونها و یا حرکت بین صفحه ها فراخوانی میشه ...
خب من یک متغیرسراسری بنامsortstr هم تعیریف کردم که در اون مقدار فیلدی قرار میگیره که هم اکنون دیتاگرید براساس اون فیلد مرتب شده...
اما وقتی من مقدار sortstr رو در یک لیبل (بانامlbl) نمایش میدم مقدارش رو خالی نشون میده!!!!!!!!!!!
اما وقتی که مثلا من همونجا بهش مقدار بدم بعد توی لیبل نمایش بدم مقدار رو نشون میده...
مثلا من در زیربرنامهdgrd_SortCommand مقدارsortstrرو می دم sortstr=e.SortExpression
خب بعد توی لیبل مقدار فیلد موردنظر رو نشون میده اما وقتی که در dgrd_PageIndexChangedمی خوام مقدار قبلی متغیرsortstr رو نشون بده خالی نشون میده!!!!!!!!!!
دلیلش چیه؟ مگه الان سراسری نیست؟!

------
اگه روش دیگه ای هم میدونید که بتونم امکان مرتب سازی براساس ستونهای خاصی به همراه صفحه بندی رو در یک برنامه بزارم بهم بگید.

ممنون
(من کدهام رو دستی توی دریم وریور می نویسم فعلاً)

h.alizadeh
چهارشنبه 04 اردیبهشت 1387, 21:04 عصر
ببخشید کسی تا حالا امکان مرتب سازی و صفحه بندی رو با هم روی یک دیتا گرید بکار نبرده؟!

لطفاً کمکم کنید کارم گیر http://qsmile.com/qsimages/37.gif

Alireza_Salehi
چهارشنبه 04 اردیبهشت 1387, 21:53 عصر
خوب واضحه سراسری تعریف کردن یک متغییر در ASP.NET به این معنی نیست که همه جا در دسترس باشه! در هر درخواستی از سرور همه چیز از اول در نظر گرفته میشه!

مگر این که در Session,cookie,QueryString یا هر جای دیگه ای که پایدار باشه مقادیر رو ذخیره کرده باشید.

مثلا در Page_Load بنویسید

Session("string1")="ali"

و در dgrd_PageIndexChanged
بنویسید


Dim s As String=Session("string1")
Lable1.Text=s

h.alizadeh
پنج شنبه 05 اردیبهشت 1387, 00:22 صبح
واقعاً ممنون
اینو نمی دونستم

ولی این هم که باعث پایین اومدن کارایی متغیرهای سراسری میشه

بهرحال فعلاً که برنامه م درست شد (البته این یک تست بود چند روز دیگه روی پروژه اصلی م پیاده می کنم امیدوارم اونجام کارم رو راه بندازه)

یک سؤال هم از اساتید داشتم که آیا به نظرتون این روشی که من استفاده کردم آیا روش خوبی هست؟ یا روش بهتری برای اینکار دارید؟

twelve
پنج شنبه 05 اردیبهشت 1387, 00:45 صبح
con = New SqlConnection( "Server=localhost;UID=sa;PWD=sa;Database=Main" )

کانکشن استرینگ رو در وب کانفیگ بذارین.


dad= New SqlDataAdapter( "Select * From news Order By " & strSortField , con )

بهتره برای کار روی داده های بانک از sp استفاده کنی
در نهایت اگر برای Sorting و Paging هم خودت کوئری بنویسی و اون رو به دیتاگرید واگذار نکنی بهتره.

h.alizadeh
پنج شنبه 05 اردیبهشت 1387, 23:47 عصر
در نهایت اگر برای Sorting و Paging هم خودت کوئری بنویسی و اون رو به دیتاگرید واگذار نکنی بهتره
این کار رو بلد نیستم میشه بهم یاد بدید؟

ممنون