PDA

View Full Version : ویرایش ستونهای دی بیگرید به غیر ازستون کلید



tik_tak
پنج شنبه 11 مهر 1387, 22:38 عصر
با سلام
یه دی بی گرید دارم رویه فرمم که یکی از ستونهاش کلید اصلی . بقیه ستونهاش سایر فیلدهای جدولمه
فیلدهای جدول قابل ویرایشند یعنی اگه کاربر رویه هر سطر دی بی گرید کلیک کنه وبعد میتونه هرجوری میخواد اونو تغییر بده بعدشم با کلید ثبت ، این تغییرات رو ثبت کنه !
من میخوام به غیر از ستون کلید اصلی دی بیگریدم بقیه ستونها بتونن ویرایش بشن
ولی کسی نتونه محتویات ستون کلید و تغییربده
مثه حالتی که readonly یه ادیت رو false میکنیم !
با تشکر

SYNDROME
جمعه 12 مهر 1387, 07:55 صبح
2 روش وجود دارد.
1-بر روی ستون مورد نظر کلیک کنید و خاصیت Readonly آن را True کنید.
در چنین شرایطی وارد ستون مورد نظر خواهید شد ولی امکان ویرایش آن ار نخواهید داشت.
2-در رویداد OnColEnter دستور زیر را بنویسید


IF DBGrid1.SelectedIndex In [1] Then
DBGrid1.Options := DBGrid1.Options - [dgEditing]
Else
DBGrid1.Options := DBGrid1.Options + [dgEditing];

شماره ستونهایی که نمی خواهید ویرایش کنید را به جای 1 لیست کنید.([1,2,3])
در چنین شرایطی وارد ستون مورد نظر هم نمی شود.
موفق باشید

tik_tak
جمعه 12 مهر 1387, 17:54 عصر
یه سوال دیگه :
من یه دی بی گریددارم که اگه کاربر رویه رکورد موردنظرش کلیک کنه میتونه اونو بازدن دکمه دیلیت ، حذفش کنه
انتخاب رکورد:


procedure Tform1.DBGrid1CellClick(Column: TColumn);
begin
A:=strtoint(DBGrid1.Fields[1].AsString);
end;


دکمه حذف:


procedure Tform1.BitBtn1Click(Sender: TObject);
begin
if DataModule2.adotable1.Locate('cod',A,[]) then
DataModule2.adotable1.Delete;
end;



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


'' is not a valid integer value


چه جوری این دستوربنویسم که :

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

SYNDROME
جمعه 12 مهر 1387, 18:29 عصر
اینطوری امتحان کن.


IF Not DataModule2.adotable1.IsEmpty Then
IF DataModule2.adotable1.Locate('cod',A,[]) then
DataModule2.adotable1.Delete;

موفق باشید

Amir_Safideh
جمعه 12 مهر 1387, 18:29 عصر
در مورد سوال اولتون که دوستون جواب دادن . در مورد سوال دومتون هر چند بهتر بود توی یه تاپیک دیگه میپرسیدید ولی بهتره قبل از دستور حذف چک کنید که دیتاسورس شما دارای رکورد باشه و اگر رکوردی نبود دستور حذف اعمال نشه :

if Not Table1.IsEmpty then
Table1.Delete;

در ضمن لازم نیست که رکورد مورد نظرت رو برای حذف جستجو کنی . زمانی که کاربر روی گرید کلیک میکنه و میخواد رکورد رو حذف کنه همون رکورد انتخاب شده در دی بی گرید رکورد جاری محسوب میشه و عمل حذف روش انجام میشه . کار دستور Locate هم همینه که حاصل جستجو رو به عنوان رکورد جاری قرار میده . پس رمانی که کاربر رکورد در دی بی گرید انتخاب کرده دیگه نیازی به جستجوی مجدد نیست .
------------
موفق باشید .

tik_tak
جمعه 12 مهر 1387, 20:06 عصر
در مورد سوال اولتون که دوستون جواب دادن . در مورد سوال دومتون هر چند بهتر بود توی یه تاپیک دیگه میپرسیدید ولی بهتره قبل از دستور حذف چک کنید که دیتاسورس شما دارای رکورد باشه و اگر رکوردی نبود دستور حذف اعمال نشه :
کد:
if Not Table1.IsEmpty then Table1.Delete;
در ضمن لازم نیست که رکورد مورد نظرت رو برای حذف جستجو کنی . زمانی که کاربر روی گرید کلیک میکنه و میخواد رکورد رو حذف کنه همون رکورد انتخاب شده در دی بی گرید رکورد جاری محسوب میشه و عمل حذف روش انجام میشه . کار دستور Locate هم همینه که حاصل جستجو رو به عنوان رکورد جاری قرار میده . پس رمانی که کاربر رکورد در دی بی گرید انتخاب کرده دیگه نیازی به جستجوی مجدد نیست .


ممنونم ..درسته حق با شما بود .... دیگه لازمم نیست اون متغیر A تعریف بشه و اون تابع توCellClick نوشته بشه و اون جستجو صورت بگیره