PDA

View Full Version : یه سوال در مورد datagrid



j.farazani
چهارشنبه 29 اسفند 1386, 01:15 صبح
سلام

آیا میشه در بین رکوردهای یک datagrid یه رکورد ثبت کرد:متفکر::متفکر:

ممنون از محبتتون

اوبالیت به بو
چهارشنبه 29 اسفند 1386, 01:26 صبح
بله میشه.
وقتی روی DataGrid راست کلیک کردی و رفتی در قسمت Propertiesو بعدش AlowAddNew رو تیک زدی می تونی رکورد جدید ثبت کنی.

فاطمه وطن دوست
چهارشنبه 29 اسفند 1386, 02:42 صبح
سلام ، با تبریک فرا رسیدن سال نو.
http://barnamenevis.org/forum/showthread.php?t=19603&highlight=%D8%B0%D8%AE%DB%8C%D8%B1%D9%87+%D8%B1%DA %A9%D9%88%D8%B1%D8%AF+%D8%AF%D8%B1+%D8%AF%DB%8C%D8 %AA%D8%A7+%DA%AF%D8%B1%DB%8C%D8%AF

ali_habibi1384
چهارشنبه 29 اسفند 1386, 06:25 صبح
البته بدون چک کردن اعتلر داده های ورودی و Error Handling

j.farazani
چهارشنبه 29 اسفند 1386, 17:16 عصر
با تشکر از همه دوستان عزیزم

ظاهرا سوالم رو بد مطرح کردم


آیا میشه در بین رکوردهای یک datagrid یه رکورد ثبت کرد

فرض کنید در گرید من کاربر 10 رکورد وارد کرده حالا می خواد بعد از رکورد پنجم اطلاعات رو ثبت کنه . یعنی وقتی کلید اضافه رو کلیک کرد ، رکورد جدیدی بعد از رکورد پنجم ببینه

آیا میشه ؟؟؟؟

ممنون از بزرگیتون

فاطمه وطن دوست
چهارشنبه 29 اسفند 1386, 18:12 عصر
سلام ، باتبریک فرا رسیدن سال نو.


http://barnamenevis.org/forum/showthread.php?t=87511&highlight=%D8%AF%D8%B1+%D8%A8%DB%8C%D9%86+%D8%B1%D A%A9%D9%88%D8%B1%D8%AF

فاطمه وطن دوست
چهارشنبه 29 اسفند 1386, 18:25 عصر
اینم خوب گفته .
http://barnamenevis.org/forum/showthread.php?t=21609&highlight=%D8%AF%D8%B1+%D8%A8%DB%8C%D9%86+%D8%B1%D A%A9%D9%88%D8%B1%D8%AF

j.farazani
چهارشنبه 29 اسفند 1386, 21:05 عصر
سلام ، باتبریک فرا رسیدن سال نو.


http://barnamenevis.org/forum/showthread.php?t=87511&highlight=%D8%AF%D8%B1+%D8%A8%DB%8C%D9%86+%D8%B1%D A%A9%D9%88%D8%B1%D8%AF



سلام

سال نو شما هم مبارک

اما این تاپیک ها به نتیجه نرسیده . راه دیگزی سراغ ندارید . مثالی . چیزی......


بازم ممنون

vahidm
چهارشنبه 29 اسفند 1386, 21:48 عصر
سلام دوست عزیز
این کار شدنی نیست
البته این نظر منه
ببخشید

j.farazani
چهارشنبه 29 اسفند 1386, 22:36 عصر
سلام

وحید جان من شخصا برنامه هاییی رو دیدم که با vb نوشته شدند (البته صاحبنشان می گفتن) که قادر بودند این کار رو انجام بدهند . این یک مسئله بسیار مهم برای طراحی سیستمهای یکپارچه هست . اگه این تاپیک به نتیجه برسه همه دوستان می تونند از نتیجه اون بهره ببرند

خدایی اگه اطلاعاتی دارید دریغ نکنید

خود من هم دنبال این قضیه هستم و به یه جاهایی هم رسیدم . اماخیلی ناقصه

بازم ممنون از همه دوستان گل سایت خوبمون

vahidm
پنج شنبه 01 فروردین 1387, 00:02 صبح
فکر کنم با استفاده از دستور Row بشه این کار رو کرد
البته باید امتحان کنم
حالا این به چه دردی میخوره ؟

Mbt925
پنج شنبه 01 فروردین 1387, 06:11 صبح
نه این کار بصورت مستقیم امکان پذیر نیست.
دلیلشم واضحه.
در مورد طرز کاره بانک های اطلاعاتی و ساختار فایل ها کمی مطالعه کنید مشکلتون حل میشه.

j.farazani
پنج شنبه 01 فروردین 1387, 20:00 عصر
نه این کار بصورت مستقیم امکان پذیر نیست.
دلیلشم واضحه.
در مورد طرز کاره بانک های اطلاعاتی و ساختار فایل ها کمی مطالعه کنید مشکلتون حل میشه.

سلام
با تشکر از استاد عزیزم

آیا فایل pdf یا جزوه ای ، مقاله ای یا تاپیکی در این زمینه سراغ دارید .( جستجو کردم چیز جالبی پیدا نکردم)

بازم ممنون از بزرگواریتون



فکر کنم با استفاده از دستور Row بشه این کار رو کرد
البته باید امتحان کنم
حالا این به چه دردی میخوره ؟


در طراحی نرم افزار باید سند مثبته با ضمائم اون بخونه . اگر این جوری نباشه از لحاظ پی گیریهای حسابرسی و ایزو و..... مشکلات زیادی در عطف و ربط بین اسناد و سیستمهای مرتبط ظاهر میشن.

خلاصه که خیلی مهمه

Mbt925
پنج شنبه 01 فروردین 1387, 23:38 عصر
سلام

آیا فایل pdf یا جزوه ای ، مقاله ای یا تاپیکی در این زمینه سراغ دارید .( جستجو کردم چیز جالبی پیدا نکردم)



منظورم از این که گفتم مشکلتون حل میشه یعنی از درج رکورد بین رکوردهای دیگه منصرف می شین.

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

j.farazani
جمعه 02 فروردین 1387, 19:42 عصر
البته اگه حجم داده هاتون بالا نیست خیلی مشکلی نداره.

سلام
ممنون از راهنماییتون

اما منظورتون رو در جمله بالا نفهمیدم چی مشکلی نداره . یعنی میشه این کار رو کرد

اگه میشه لطف بفرمایید ویه نمونه برای من اینجا بزارید

بازم ممنون از بزرگیتون

Mbt925
شنبه 03 فروردین 1387, 00:37 صبح
همون طور که گفتم بصورت مستقیم نمی تونید رکورد ها رو بین رکوردهای دیگه قرار بدین.

وقتی حجم داده ها پایین باشه دیگه لازم نیست از دیتابیس استفاده بشه و در نتیجه دستمون بازه.

j.farazani
یک شنبه 04 فروردین 1387, 00:31 صبح
وقتی حجم داده ها پایین باشه دیگه لازم نیست از دیتابیس استفاده بشه و در نتیجه دستمون بازه

سلام
با تشکر از محبت شما

در مورد روشی که فرمودید اطلاعات چندانی ندارم (فقط در حد شنیدار)

اگه براتون ممکنه یه بزرگواری بکنید ویه نمونه برای من اینجا بزارید و یا اینکه یه pdf و یا کتابی یا تاپیکی در این زمینه به من معرفی بفرمایید یه دنیا ممنون می شم

بازم ممنون از محبتتون

vbhamed
یک شنبه 04 فروردین 1387, 10:33 صبح
سلام

طبق چیزی که من فهمیدم شما اصلا نیاز به این کار ندارین بلکه باید از جداول پدر و فرزند استفاده کنید تا ضمائم یک سند رو به اون مرتبط کنید و نشون بدین، یعنی شما نباید ضمیمه های یک سند رو در همون جدول اطلاعات سند ذخیره کنید
برای این کار باید با طراحی منطق بانک اطلاعاتی آشنا باشید و ارتباطات رو بشناسید که می تونید از این همه کتابهای بانک اطلاعاتی بازار استفاده کنید

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

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

1 محمدی
2 رضایی
3 حسنی

و قراره فرهادی بین رضایی و محمدی درج بشه
ستون اول همون Row و ستون دوم نام هست
شما رکوردتون رو به صورت معمولی درج کنید که آخر جدول قرار می گیره، حالا به مقدار فیلد Row قبلی یک مقدار کوچک مثلا .01 اضافه کنید و Row فیلد جدید رو برابر این مقدار قرار بدین
سپس اطلاعاتتون رو بر اساس فیلد Row مرتب کرده و نشون بدین که میشه


1 محمدی
1.01 فرهادی
2 رضایی
3 حسنی


فقط فیلد رو حتما از نوع اعشاری بگیرید تا اگر بعدا بین 1 و 1.01 هم خواستید درج کنید بتونید به عدد 1 یک مقدار کوچکتر مثلا .005 اضافه کنید تا نتیجه بشه 1.005 و این عدد بین 1 و 1.01 قرار داره، پس رکوردش هم وقتی اطلاعات بر اساس Row مرتب باشه، بین رکورد اول و دوم واقع میشه

1 محمدی
1.005 اکبری
1.01 فرهادی
2 رضایی
3 حسنی

راه دیگه هم اینکه، اگر اطلاعاتتون زیاد نیست می تونید یک جدول مشابه ایجاد کنید و رکوردها رو به ترتیب دلخواه توی اون درج کنید و سپس جدول اصلی رو پاک کنید و رکوردها رو از جدول دوم به جدول اصلی کپی کنید، البته Compact کردن دیتابیس یادتون نره (با کد)

یک راه دیگه هم هست که اصلا با بانکهای اطلاعاتی کار نکنید و از لیست پیوندی استفاده کنید که خیلی راحت یک رکورد رو بین چند تا درج می کنه، اما دیگه امکانات بانک اطلاعاتی و Sql رو در اختیار ندارید
برای این کار باید به کتابهای ساختمان داده مراجعه کنید

در هر حال من همون روش اول رو پیشنهاد می کنم

j.farazani
دوشنبه 05 فروردین 1387, 01:28 صبح
سلام

حامد جان ممنون از محبتت

درست گفتی من میخوام در یک گرید که در واقع chaild هست اطلاعات اقلام سندم رو درج کنم . روش که فرمودی بسیار عالیه اما مشکل اینجاست که کاربر انتظار داره به عنوان مثال وقتی در گرید 20 سطر وجود داره روی سر پنجم قرار بگیره و با فشردن کلید + زیر سطر پنجم یک سطر با شماره 6 ایجاد بشه (این به این معناست که از سطر 6 قدیمی به بعد یک عدد به اونها اضافه میشه یعنی سطر آخر 21 میشه ) و این در حالیه که هنوز کلید تایید رو کلیک نکرده (updae انجام نشده که sort صورت بگیره ) در حالی که در روش اول شما که روش بسیار خوبی هم هست حتما باید اطلاعات update و پس از اون sort بشن . (این طور که من فهمیدم و خودم هم در حال حاضر از اون استفاده میکنم در این روش ابتدا رکورد جدید در انتها ایجاد می شه سپس بعد از انجام عملیات update و پس از اون sort در جای خودش قرار می گیره)
یه نکته : البته کاربرمن مستقیما روی گرید اطلاعات رو ثبت میکنه
حالا اگه کلید انصراف رو کلیک کرد که باید همه چیز به حالت اول برگرده ؟؟؟

آیا برای این مشکل راه حلی دارید؟؟؟

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

shahpari
دوشنبه 05 فروردین 1387, 11:28 صبح
اگر از update کردن رکوردست منصرف شدین کافیه با کد


adodc1.recordset.cancelupdate


از update شدن جلوگیری کنید

vbhamed
دوشنبه 05 فروردین 1387, 13:36 عصر
سلام
دستور CancelUpdate شما رو به رکورد قبلی بر می گردونه
اما یک سری گرایدها هم هستن که خودشون جدولهای فرزند رو پشتیبانی می کنن که من یک نمونه اش رو برای دات نت دیدم که مثل اکسس عمل می کرد، البته قوی تر
ولی در کل به نظر من درج اطلاعات در پنجره جداگانه بهتر از خود لیست هست

j.farazani
سه شنبه 06 فروردین 1387, 02:28 صبح
سلام

ممنون از محبت دوستان

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



چند تا راه رو امتحان کردم که بهترینش اینه

موقع اضافه شدن رکورد کاربر سطر مورد نظر خودش رو دز ستون row وارد میکنه

موقع انجام update کد زیر


dim fld as ADODB.Field
If Not rs.BOF And Not rs.EOF Then
rs.MoveFirst
Set fld = rs!Row
For i = 1 To rs.RecordCount
fld = rs.AbsolutePosition
rs.MoveNext
Next i
rs.Resync


موقع حذف رکورد کد زیر


If Not rs.EOF Then rs.MoveFirst
rs.Resync
Do While Not rs.EOF
rs.Fields("row") = rs.AbsolutePosition
rs.MoveNext
rs.Resync
Loop


البته هنوز ایراداتی به این روش وارده از جملیه اینکه کنده و برای اسناد بالای 50 ردیف طاقت فرسا است

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

حامد جان اگه بتونی یه نمونه اینجا بزارید یه دنیا ممنون میشم

vbhamed
سه شنبه 06 فروردین 1387, 09:11 صبح
به نظر من بهتره شما یک grid بزارید و کاربر با grid به سطر مورد نظر بره و بعد از زدن مثلا دکمه Insert یک فرم باز بشه و اطلاعات رکورد جدید رو بگیره و قبل از سطری که روش هستیم درج کنه
اینطوری نیاز نیست کاربر شماره سطر رو بده چون خودمون AbsolutoPositon جاری رو داریم و قبل از اون قرار می دیم

j.farazani
سه شنبه 06 فروردین 1387, 14:10 عصر
سلام



موقع اضافه شدن رکورد کاربر سطر مورد نظر خودش رو دز ستون row وارد میکنه
حامد جان شرمنده من جمله خودم رو کامل بیان نکردم منظور من این بود که در صورتی که کاربر قصد داشته باشه مثلا در یک گرید که 20 سطر داره سطر جدید اون در مکان پنجم قرار بگیره باید به جای عدد 21 که خود سیستم برای اون درج کرده(چه طوریش رو توضیح میدم) عدد 5 رو وارد کنه

کد مورد نظر جهت ایجاد شماره سطر به طور اتوماتیک زمانی که کاربر کلید + رو کلیک میکنه


DataGrid1.Col = 2
DataGrid1.Text = DataGrid1.ApproxCount


البته ستون دوم گرید من همون row هست
یا اینکه به قول شما میشه از AbsolutoPositon هم استفاده کرد


اما هنوز این کد و این روش دلچسب نیست

هم اکنون نیازمند یاری سبز شما هستم

vbhamed
سه شنبه 06 فروردین 1387, 14:47 عصر
سلام
یک سؤال
میشه بگین این برنامتون اصلا کار کلیش چی هست و این قسمت کارش چیه ؟

j.farazani
چهارشنبه 07 فروردین 1387, 03:23 صبح
با سلام
حامد جان این یه برنامه حسابداری با نیم نگاهی به انبار ، اما مورد این تاپیک در طراحی تمامی نرم افزارها یه مسئله مهمه (حداقل اون سیستمهایی که نیاز به استناد به ضمائم زیادی دارند فوق العاده نیاز به این قضیه دارند)

بازم ممنون

vbhamed
چهارشنبه 07 فروردین 1387, 11:13 صبح
سلام
بازم کلی گفتین
اینهمه نرم افزار حسابداری تو بازار هست
ببینید چطوری اطلاعات رو نشون می دن
اگر منظورتون نمایش سرفصل هاست که اصلا با Treeview انجام میشه
ولی بقیه برنامه هام از جدول پدر و فرزند استفاده می کنن

j.farazani
پنج شنبه 08 فروردین 1387, 04:50 صبح
سلام

دوستان ببخشید اگه مطلب طولانی شد

حامد جان دست شما درد نکنه با همون کد یه جورایی مشکل رو حل کردم(کد تغییری نکرد)

بازم ممنون