ورود

View Full Version : سوال: سوال در مورد مرتب سازی در دیتاگرید



hsn_abieteh
پنج شنبه 25 مهر 1387, 19:14 عصر
خسته نباشید دوستان عزیز...
دوستان در دیتا گرید چگونه می تونم طوری تنظیم کنم که اطلاعات رو خودش جا به جا نکنه
متاسفانه هر چی اطلاعات میاد داخل دیتا گرید جابه جا میشه و این برام مشکل ساز شده
اگر ممکنه راهنمایی کنید چیکار کنم که اطلاعات به همون ترتیبی که اضافه میشه مرتب(sort) بشه
یعنی مثلا اخرین رکوردی که اضافه کردم در اخر دیتا گرید باشه

یک سوال دیگه هم(محض سو استفاده:افسرده:)
این کد رو در فرم لود برنامم اضافه کردم تا وقتی اجرا میشه زبان فارسی بشه
SendKeys "+%"
سورس برنامه که اجرا میکنم فارسی میشه ولی متاسفانه وقتی برنامه رو با ستاپ فکتوری ستاپ می کنم و نصب میشه زبان فارسی نمیشه

ممنون میشم کمکم کنید...:خجالت:

mormorbaba
پنج شنبه 25 مهر 1387, 19:50 عصر
با سلام شما بايد ارتباط دهنده يا Conection خود را با Datagrid مرتب كنيد بر اساس فيلدي كه در هر ركورد يك كانتر بندازد. و در انتها در هر بار add كردن datagrid را reftesh كنيد .

و در رابطه با فارسي كردن كيبرد كد زير را استفاده كنيد.

Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal Flags As Long) As Long
Dim xx1 As Long

(xx1 = LoadKeyboardLayout("00000429", 1

موفق باشيد.

hsn_abieteh
پنج شنبه 25 مهر 1387, 19:58 عصر
سلام
مرسی
ولی میشه بیشتر توضیح بدید که دقیقا چیکار کنم
چون من با وی بی زیاد کار نکردم:افسرده:

اگه امکانش هست یک مثال بزنید...

mormorbaba
پنج شنبه 25 مهر 1387, 20:18 عصر
يه فيلد از نوع AutoNumber تعريف كن .
از چه كانكشني استفاده مي كني اين واسه Adodc



"Adodc1.RecordSource = "SELECT *from nametable order by namefiled
Adodc1.refresh

Dr.Bronx
پنج شنبه 25 مهر 1387, 21:06 عصر
( زبان فارسی )
توی جنرال یا همون خط اول
اصلا یه کاری کن
یک ماژول درست کن اسمش هم مهم نیست توش بنویس


Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long

بعد توی هر جایی که می خوای فارسی بشه
توی قسمت GotFocus
مثلا می خوای وقتی می خوای توی text1 چیزی می خوان بنویسن فارسی باشه
پس اینجا می نویسی

Private Sub Text1_GotFocus()
بعد در ادامه می نویسی

Dim xx As Long
xx = LoadKeyboardLayout("00000429", 1)
که در کل اینجوری می شه


Private Sub Text1_GotFocus()
Dim xx As Long
xx = LoadKeyboardLayout("00000429", 1)
End Sub
موفق باشید

hsn_abieteh
پنج شنبه 25 مهر 1387, 21:54 عصر
يه فيلد از نوع AutoNumber تعريف كن .



از چه كانكشني استفاده مي كني اين واسه Adodc



"Adodc1.RecordSource = "SELECT *from nametable order by namefiled
Adodc1.refresh





متاسفانه این خطای زیر رو میده:عصبانی++:

http://i37.tinypic.com/2cgg3s0.jpg

Dr.Bronx
پنج شنبه 25 مهر 1387, 22:10 عصر
خوب عزیز من
شما نباید که از Datagrid فیلد رو برداری
باید از دیتا بیس table رو انتخاب کنی

شما نوشتی


adodc1.recordsource = "select * from datagrid1 .....

این اشتباهه
من syntax درست یا همون طرز صحیح نوشتن رو برات می نویسم
اگه باز هم اشکال داشتی اسم table رو بنویس تا دستور رو کامل بزارم برات


Adodc1.recordsource = "Select * From Table1 ORDER BY FieldName ASC / DESC

ASC = نزولی
EDSC = صعودی

hsn_abieteh
جمعه 26 مهر 1387, 08:45 صبح
مرسی دکتر جان

نام جدول Hesabdari هستش
ولی باز هم همون خطا رو داد

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

Dr.Bronx
جمعه 26 مهر 1387, 10:11 صبح
کار نشد نداره
فقط یکم دقت کن
اول این کد رو توی قسمت Load فرم قرار می دی تا دیتابیس رو بهش نشون بدی و CommandType رو تغییر بدی
فقط جایی که پررنگ کردم اسم دیتابیس رو بنویس یعنی جایی هست که دیتا بیس قرار داره
بقیش درسته

Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Database.mdb"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from Hesabdari"
Adodc1.Refresh

بعد این دستور رو می نویسی
اگه از Datagird استفاده می کنی که هیج وگرنه اون خط آخر رو بردار

Adodc1.RecordSource = "select * from Hesabdari order by ID"
Adodc1.Refresh
DataGrid1.Refresh
اگه به مشکل خوردی بگو

hsn_abieteh
یک شنبه 28 مهر 1387, 17:27 عصر
متاسفانه باز یک خطای دیگه داد:اشتباه:
راستی من نام فایل دیتابیس با نام جدول یکیه
که بعید میدونم مشکل از اون باشه:افسرده:
کمک کنید تو رو خدا

http://i38.tinypic.com/2v2ia93.jpg

davood59
یک شنبه 28 مهر 1387, 19:13 عصر
سلام؛
آقای دکتر ، من هم علاقه مند شدم از این ایده شما برای فارسی نوشتن در text هام استفاده کنم، کد برنامه رو میذارم، اگه امکانش هست طرز گذاشتن کد رو بگید. چون من گذاشتم ولی error داد. ازتون ممنونم.

Private Sub Command1_Click()
With Adodc1
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\book.mdb;Persist Security Info=False" 'ertebat ba bank
.RecordSource = "Select * From book " 'entekhab jadval
.Refresh
.Recordset.AddNew 'ezafe kardan personel

.Recordset!nbook = Text1.Text
.
.
.Recordset!isbn = Text6.Text
MsgBox ("ÇØáÇÚÇÊ ÔãÇ ÈÇ ãæÝÞíÊ ÏÑ ˜ÊÇÈÎÇäå ËÈÊ ÔÏ")
.Recordset.Update
Text1.Text = Delete
.
.
Text6.Text = Delete

.Refresh

End With

Form_Load


End Sub

Dr.Bronx
یک شنبه 28 مهر 1387, 20:09 عصر
اول اینکه اون ماژولی رو که گفتم ایجاد کنین و اون کد رو توش بزارین
من نمی دونم شما کجای این کد می خوای استفاده کنی
ولی عکس هارو ببینید متوجه می شید

اول یک ماژول ایجاد می کنید - اسمش رو هرچی می خواین بزارین
به طور مثال : GotFocus

http://i38.tinypic.com/egd5yw.jpg

کد زیر رو رو کپی کنید و توی اون قرار بدید ( فایل ماژول رو توی پیوست گذاشتم - به برنامه اضافه کنید )


Option Explicit

Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long


حالا تو هر جای برنامه که بخواین می تونین از این استفاده کنین

به طور مثال می خوایم Text1 رو وقتی که می خوان داخلش تایپ کنن به صورت اتوماتیک فارسی بشه

اولین کاری که می کنیم اینه که رویداد GotFocus رو از Text1 انتخاب می کنیم

http://i35.tinypic.com/zwjn7k.jpg

بعد از اون کد زیر رو در این رویداد وارد کنید


Dim xx As Long
xx = LoadKeyboardLayout("00000429", 1)

حالا هر زمان که روی text1 کلیک کنید زبان شما به فارسی تغییر پیدا خواهد کرد
موفق باشید

mormorbaba
یک شنبه 28 مهر 1387, 20:17 عصر
Adodc1.CommandType = adCmdText

hsn_abieteh
یک شنبه 28 مهر 1387, 20:36 عصر
Adodc1.CommandType = adCmdText
من مخصوصا تغییر دادم ببینم خطاش درست میشه یا نه که نشد

دوست عزیز ممنون از کمکی که کردید:لبخندساده:

آقای دکتر از شما هم ممنونم،متاسفانه مشکل کم سوادیه منه:افسرده:

بازم مرسی

Dr.Bronx
یک شنبه 28 مهر 1387, 20:41 عصر
مشکل شما ادامه اون قسمتی هست که من توی عکس نمی بینم
یعنی بعد از
Datasourse = " app.path
اگه ادامه این رو عکسش رو بزارین خوبه
چون احتمالا مشکل از همون جاست

Dr.Bronx
یک شنبه 28 مهر 1387, 20:42 عصر
Adodc1.CommandType = adCmdText
این رو به جای قبلی قرار بدین
البته مشکل از این نیست ولی اگه نباشه datagird کار نمی کنه ولی الان مشکل شما adodc هست

پست قبلی رو انجام بدین


مشکل شما ادامه اون قسمتی هست که من توی عکس نمی بینم
یعنی بعد از
Datasourse = " app.path
اگه ادامه این رو عکسش رو بزارین خوبه
چون احتمالا مشکل از همون جاست

hsn_abieteh
یک شنبه 28 مهر 1387, 20:55 عصر
دقیقا مشکل من با ADODC هستش

بفرمایید...
http://i38.tinypic.com/10dxkid.jpg

Dr.Bronx
یک شنبه 28 مهر 1387, 21:41 عصر
آی خدا
نا امید شدم از خودم
به این تغییر بدید


Datasource = "& app.path & " \Hesabdari.mdb"

البته من نمی دونم شما exe‌کجاست شاید اینجوری باشه


Datasource = "& app.path & " \Backup\hesabdari.mdb"

موفق باشید

hsn_abieteh
یک شنبه 28 مهر 1387, 22:33 عصر
خدا رو شکر درست شد:تشویق:مرسی
آقای دکتر فقط یک سوال دیگه داشتم(هر چند میترسم کتک بخورم ایندفعه:افسرده:)

همه چی حل شد فقط موقع اجرای برنامه این خطا داده میشه و اوکی که می کنم برنامم اجرا میشه
نمیشه این خطا رو یه کاریش کرد نیاد:افسرده:
http://i35.tinypic.com/4hrtxu.jpg

البته اگه دوست داشتیم جواب بدین
خیلی خیلی ممنون بابت کمکتون:قلب: خدا خیرتون بده

davood59
دوشنبه 29 مهر 1387, 10:02 صبح
سلام آقای دکتر؛
درست شد. دستتون واقعا درد نکنه. مشکلم حل شد. از اینکه توضیحی به این کاملی و مبسوطی همراه با تصویر ارائه دادید یک دنیا ممنونم :تشویق:. همچنین از اینکه وقت ارزشمندتون رو گرفتم عذر میخوام. ضمناً میشه به طور مختصر منطق این ماژول رو توضیح بدید؟ اگه اشکالی نداره بعضی از سوالام رو هم ازتون به صورت خصوصی می پرسم.
با تشکر مجدد از جنابعالی

Dr.Bronx
سه شنبه 30 مهر 1387, 19:50 عصر
خدا رو شکر درست شدمرسی
آقای دکتر فقط یک سوال دیگه داشتم(هر چند میترسم کتک بخورم ایندفعه)

همه چی حل شد فقط موقع اجرای برنامه این خطا داده میشه و اوکی که می کنم برنامم اجرا میشه
نمیشه این خطا رو یه کاریش کرد نیاد


البته اگه دوست داشتیم جواب بدین
خیلی خیلی ممنون بابت کمکتون خدا خیرتون بده

این جارو درست کن
خاصیت مربوط به Adodc

http://tinypic.info/files/kvjs15hvix7kmlyqx61a.jpg

اون رو به adcmdtabel تغییر بدید
مشکلون حل میشه
موفق و پیروز باشید

majjjj
چهارشنبه 01 آبان 1387, 10:41 صبح
Private Sub txt_name_KeyPress(KeyAscii As Integer)
If (KeyAscii = 13) Then
txt_plak.SetFocus
End If
On Error Resume Next
If KeyAscii = 104 Then KeyAscii = -57
If KeyAscii = 72 Then KeyAscii = -62
If KeyAscii = 102 Then KeyAscii = -56
If KeyAscii = 113 Then KeyAscii = -42
If KeyAscii = 119 Then KeyAscii = -43
If KeyAscii = 101 Then KeyAscii = -53
If KeyAscii = 114 Then KeyAscii = -34
If KeyAscii = 121 Then KeyAscii = -37
If KeyAscii = 117 Then KeyAscii = -38
If KeyAscii = 111 Then KeyAscii = -50
If KeyAscii = 112 Then KeyAscii = -51
If KeyAscii = 105 Then KeyAscii = -27
If KeyAscii = 116 Then KeyAscii = -35
If KeyAscii = 91 Then KeyAscii = -52
If KeyAscii = 93 Then KeyAscii = -115
If KeyAscii = 92 Then KeyAscii = -114
If KeyAscii = 96 Then KeyAscii = -127
If KeyAscii = 97 Then KeyAscii = -44
If KeyAscii = 115 Then KeyAscii = -45
If KeyAscii = 100 Then KeyAscii = -19
If KeyAscii = 103 Then KeyAscii = -31
If KeyAscii = 106 Then KeyAscii = -54
If KeyAscii = 107 Then KeyAscii = -28
If KeyAscii = 108 Then KeyAscii = -29
If KeyAscii = 59 Then KeyAscii = -33
If KeyAscii = 39 Then KeyAscii = -112
If KeyAscii = 122 Then KeyAscii = -39
If KeyAscii = 120 Then KeyAscii = -40
If KeyAscii = 99 Then KeyAscii = -46
If KeyAscii = 118 Then KeyAscii = -47
If KeyAscii = 98 Then KeyAscii = -48
If KeyAscii = 110 Then KeyAscii = -49
If KeyAscii = 109 Then KeyAscii = -63
If KeyAscii = 44 Then KeyAscii = -26
If KeyAscii = 63 Then KeyAscii = 191
If KeyAscii = 77 Then KeyAscii = -58
If KeyAscii = 48 Then KeyAscii = 16
If KeyAscii = 49 Then KeyAscii = 17
If KeyAscii = 50 Then KeyAscii = 18
If KeyAscii = 51 Then KeyAscii = 19
If KeyAscii = 52 Then KeyAscii = 20
If KeyAscii = 53 Then KeyAscii = 21
If KeyAscii = 54 Then KeyAscii = 22
If KeyAscii = 55 Then KeyAscii = 23
If KeyAscii = 56 Then KeyAscii = 24
If KeyAscii = 57 Then KeyAscii = 25
If KeyAscii = 58 Then KeyAscii = 26
End Sub
از اين كد هم ميتونيد براي فارسي كردن استفاده كنيد ديگه لازم نيست مشكل برگردوندن زبان رو هم داشته باشين
البته ميتونين يكم سادش هم بكنيد كه نخواستم خيلي پيچيده بشه

Mbt925
چهارشنبه 01 آبان 1387, 11:22 صبح
به يه نكته كلي رو در مورد نوع شرط گذاري دوست عزيز آقاي majjjj اشاره مي كنم:
در اين شرط ها كه فقط يكي از حالات استفاده ميشه بهترين گزينه استفاده از SELECT CASE هست ولي اگه از IF و ELSE استفاده ميكنيد، حتما از ساختار زير استفاده كنيد:




IF
...
ELSEIF
...
ELSEIF
...
END IF


با اين تغيير وقتي يكي از شرط ها درست باشه، بقيه شرط ها چك نميشن ولي در كد شما
در هر حالتي همه شرط ها بررسي ميشن و زمان اجراي كد افزايش پيدا خواهد كرد.

Dr.Bronx
چهارشنبه 01 آبان 1387, 12:42 عصر
وقتي با اون كد به اون راحتي زبان رو فارسي مي كنيم
چه نيازي به اين كد داريم كه به قول ايشون زمان اجراي كد هم زياد باشه !
همون كد رو مي شه جوري تنظيم كرد كه توي رويداد lostfocus دوباره زبان به انگليسي تغيير پيدا كنه
پس فكر نمي كنم مشكلي باشه