PDA

View Full Version : مشکل در Sort گرید



evilboy
شنبه 25 فروردین 1386, 11:48 صبح
سلام
من از VSFlexGrid 8 استفاده می کنم. می خواستم ببینم چجوری می تونم برای گریدم سورت بزارم که روی تمام فیلدهام مثلا کد و نام و نام خانوادگی ... بتونم سورت رو اجرا کنم

CodeMasterX
یک شنبه 26 فروردین 1386, 23:20 عصر
شما میتونی یه کار خیلی ساده انجام بدی.Sort رو به رموردستا متصل شده به گرید نسبت بدی:



Dim RS As New ADODB.Recordset
RS.Open SQLQuery,CN,adOpenStatic,adLockOptimistic

Set Grid1.DataSource = RS
RS.Sort = "FirstName ASC"

ascpro
یک شنبه 26 فروردین 1386, 23:32 عصر
منظورتون از سورت کردن اینه که به ترتیب اون فیلد بشه رکوردهاتون؟
این کدو براتون مینویسم ببینین به دردتون میخوره.


این توی general:
Public db As Database
Public rs As Recordset

اینم توی form-_load:
Private Sub Form_Load()
Set db = OpenDatabase("c:\MAIN.MDB")
Set rs = db.OpenRecordset("select * from Film order by Code")
End Sub

بازم اگر منظورتون یک چیزه دیگست لطفا کامل تر توضیح بدین شلید تونستم سوالتونو جواب بدم.

evilboy
پنج شنبه 30 فروردین 1386, 14:26 عصر
دوست عزیز من کد سورت رو توی این رویداد نوشتم



Private Sub VSFlexGrid1_BeforeSort(ByVal Col As Long, Order As Integer)
Dim str(10) As String
str(1) = "code"
str(2) = "name"
str(3) = "family"
If DataEnvironment1.rsSabt.Sort = str(Col) + " asc" Then
DataEnvironment1.rsSabt.Sort = str(Col) + " desc"
Else
DataEnvironment1.rsSabt.Sort = str(Col) + " asc"
End If
Set VSFlexGrid1.DataSource = DataEnvironment1
VSFlexGrid1.DataMember = "sabt"
End Sub

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


http://princeworld.persiangig.com/document/1.jpg

Armin62
پنج شنبه 30 فروردین 1386, 23:51 عصر
به این صورت که شما دارید کد اشخاص رو وارد میکنید اشتباست ولی با دستور زیر میتونی بزرگترین عدد اون فیلدت رو بدست بیاری.


"select max(Fieldname) from Table Name"

در مورد مرتب کردن هم VS-Flex Grid نیاز به کد نویسی نداره فقط کافیه مانند شکل زیر عمل کنی و یا در فرم لودت کد زیر رو قرار بدی

VSFlexGrid1.ExplorerBar = flexExSortShowAndMove

evilboy
جمعه 31 فروردین 1386, 10:05 صبح
دوست عزیز من زیاد متوجه نشدم
اول اینکه از ExplorerBar استفاده نکردم بخاطر اینکه وقتی گریدم رو flexDMBound می کنم سورت از کار میفته برای همین برای سورت کد نوشتم.
حالا اونو بی خیال
من فرم ثبتمو با کد زیر اینطوری نوشتم که آخرین کد رو پدا کنه و یکی بهش اضافه کنه بعد بزاره مثلا تویText1
DataEnvironment1.rsSabt.MoveLast
Text1.Text = DataEnvironment1.rsSabt!code + 1
حالا همونطوری که خودتون گفتید می خوام بزرگترین کد رو بدست بیارم و یکی بهش اضافه کنم بعد بزارمش توی Text1 که نمی دونم چجوری باید اینکار کنم
کد شما رو هم توی اس کیو ال تنظیم کردم ولی نمی دونم چجوری باید اس کیو الم رو اجراش کنم

CodeMasterX
جمعه 31 فروردین 1386, 17:10 عصر
ببین evilboy همون کد خودت خوبه.من هم از این روش استفاده می کنم.
ببین ولی قبل از نوشتم اون کد باید چک کنی که رکوردی اصلا وجود داره یا نه که خطایی نبینی:



Private Sub Form_Load()
Dim CN As New ADODB.Recordset
Dim RS As New ADODB.Recordset

CN.Open ConnectionString
RS.Open SQL,CN,adOpenStatic,adLockReadOnly

If RS.RecordCount <> 0 Then
RS.MoveLast
Me.txtCustID.Text = RS("CustomerID").Value + 1
Else
Me.txtCustID.Text = 1
End If

RS.Close
CN.Close
End Sub

Armin62
جمعه 31 فروردین 1386, 21:42 عصر
Adodc1.RecordSource = "select max(CustomerID) from table2"
Adodc1.Refresh

evilboy
شنبه 01 اردیبهشت 1386, 09:09 صبح
دوست عزیز من اصلا با Adodc کار نکردم
میشه با DataEnviroment بگید
خیلی ممنون

CodeMasterX
یک شنبه 02 اردیبهشت 1386, 00:31 صبح
دوست عزیز من اصلا با Adodc کار نکردم
میشه با DataEnviroment بگید
خیلی ممنون

آقا گرفتن بزرگترین مقدار یه رکورد چه ربطی به ADODC یا DataEnvironment داره ؟!
اگه میخواین توی کد برنامه همچین کاری بکنین یا باید یه رکوردست جدید با همون دستور آرمین باز کنین یا باید از روشی که من گفتم استفاده کنین.
مگه اون دو تا روش جواب نداده که هنوز دارین پست میفرستین ؟!

rouzbeh_ziafati
چهارشنبه 25 دی 1387, 22:11 عصر
من یه فیلد دارد در بانک که چهار نوع داده توش هست . با این مقادیر : فله – پاکت – کلینگر – سایر
حالا میخوام وقتی که توی dbgrid رکوردهای بانک رو نمایش میدم . به ترتیب بر اساس مقادیر این فیلد رکوردها رو مرتب کنه:
اول پاکت ها بعد فله ها بعد کلینگر و بعد سایر . خودم فقط میتونم بر اساس حروف الفبا و با دستور order by مرتب کنم . اما چطور میشه بر اون اساس که گفتم مرتبشون کنم ؟
حروف الفبا که میزنی اول پاکت ها میاد بعد سایر بعد فله و بعد کلینگر .
کسی راهی بلده ؟