PDA

View Full Version : کمبوباکسی با چک باکس



matinebi
جمعه 23 مرداد 1388, 19:03 عصر
به یک کامپوننت میخوام که در کمبوباکس چک باکس داشته باشه تا کاربر بتونه چند تا کالا رو انتخاب کنه
لطفا دوستان در مورد روش استفاده از اون کامپوننت هم توضیح دهید
با تشکر

saied7468
جمعه 23 مرداد 1388, 21:01 عصر
سلام
فکر کنم این جواب کارتون رو بده:

http://www.tmssoftware.com/site/img/AdvSmoothcombobox1.png

منبع:
http://www.tmssoftware.com/site/advsmoothcombobox.asp

موفق باشید

matinebi
یک شنبه 25 مرداد 1388, 16:20 عصر
با تشکر از شما دوست عزیز
یکی از دوستان کامپوننت زیر رو به من پیشنهاد کردن فکر میکنم ساده و خوب باشه اما من نمیتونم ازش کامل استفاده کنم لطفا اونو دانلود کنید و روش استفاده کزدن از اونو به من هم بگین (کار کردن با توابع اونو)
فقط میخوام بتونم اون کالاهایی که کاربر انتخاب کرده رو با کیوری فیلتر کنم تا در گرید فقط اون کالاها رو نمایش بده
دانلود:http://matinebi.persiangig.com/CheckCombo.zip

etoshey
دوشنبه 26 مرداد 1388, 21:25 عصر
فایل checkcombo.pas به uses اضافه کنید. یک متغییر به آن اختصاص دهید مثل
combo:TCheckedComboBox; سپس
combo:=TCheckedComboBox.Create(self);
combo.Parent:=form1;
combo.Show;
و برای event هم از actionlist استفاده کنید

matinebi
دوشنبه 26 مرداد 1388, 21:57 عصر
دوست عزیز به محظ این که کمبو (checkedcombobox1) رو روی فرم قرار میدم خودش به uses اضافه میکنه فقط من طریقه استفاده از اون رو برای میخوام بتونم اون کالاهایی که کاربر انتخاب کرده رو با کیوری فیلتر کنم تا در گرید فقط اون کالاها رو نمایش بده
یعنی اول باید به کالاهایی که کاربر انتخاب کرده دسترسی داشته باشم بعد بتونم اونها رو حالا به صورت آرایه یا چیز دیگه بفرستم به کیوری

etoshey
دوشنبه 26 مرداد 1388, 22:53 عصر
یک event با actionlist بسازید سپس در رویداد onExecute از تابع GetText استفاده کنید. با استفاده از GetText میتدانید آیتم های چک خورده را درون یک رشته قرار دهید.

matinebi
پنج شنبه 29 مرداد 1388, 01:35 صبح
لطفا ببینین کجای کد من اشکال داره

var str1,str2:String;
i,j,idx:Integer;
arr:array[1..100] of String;
begin
Edit5.Text:=CheckedComboBox1.GetText;
j:=1;
i:=1;
for idx:=1 to CheckedComboBox1.CheckedCount do
begin
while Edit5.text[i]<>',' do
begin
str2:=str2+Edit5.text[i];
i:=i+1;
end;
arr[j]:=str2;
str2:='';
i:=i+1;
j:=j+1;
end;
if Length(arr) > 0 then
Str1 := 'Where fname like ' + quotedStr('%' + arr[1] + '%' ) ;
for i:= 2 to length(arr) do
Str1 := Str1 + ' or fname like ' + quotedStr('%' + arr[i] + '%' ) ;

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from table1');
ADOQuery1.SQL.Add(Str1);
ADOQuery1.open;


که ارور زیر رو میده

Unclosed quotation mark before the character string '%CD'

etoshey
پنج شنبه 29 مرداد 1388, 20:06 عصر
سلام
این error برای رشته ای است که به sql server می فرستید. مقادیر رکورد ها بین " " قرار می گیرد.
http://www.sql-server-performance.com/faq/Unclosed_quotation_mark_p1.aspx

matinebi
جمعه 30 مرداد 1388, 11:11 صبح
دوستان با کد زیر مشکل ام بر طرف شد

procedure TForm1.Button1Click(Sender: TObject);
var str1,str2:String;
i,j,idx:Integer;
arr:array of String;

begin
j:=0;
i:=1;
//ÊÚÑíÝ Øæá ÂÑÇíå
SetLength(arr,CheckedComboBox1.CheckedCount);

for idx:=1 to CheckedComboBox1.CheckedCount do
begin
while (CheckedComboBox1.GetText[i]<>',')and (CheckedComboBox1.GetText[i+1]<>'') do
begin
str2:=str2+CheckedComboBox1.GetText[i];
i:=i+1;
end;
arr[j]:=str2;
str2:='';
i:=i+1;
j:=j+1;
end;

if Length(arr) > 0 then
Str1 := 'Where fname like ' + quotedStr('%' + arr[0] + '%' ) ;
for i:= 1 to High(arr) do
Str1 := Str1 + ' or fname like ' + quotedStr('%' + arr[i] + '%' ) ;

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from table1');
ADOQuery1.SQL.Add(Str1);
ADOQuery1.open;
end;
با تشکر

Felony
جمعه 30 مرداد 1388, 11:58 صبح
فقط الان مشکلم با آرایه است که باید پویا تعریف شود
لطفا در مورد آرایه پویا راهنمایی نمایید
این سوالتون به این بخش مربوط نیست و باید تو بخش مباحث عمومی بپرسید .

Hsimple11
جمعه 30 مرداد 1388, 12:19 عصر
مشکلتون چیه جناب Matinebi ؟

هرچند من پیشنهاد میکنم این روش رو تغییر بدید. ComboBox با قابلیت انتخاب آیتمها زیاد چیز روتینی نیست.

اصغر (پآچ)
جمعه 30 مرداد 1388, 12:25 عصر
سلام دوست من
میشه واضحتر توضیح بدی همچین کامپوننت رو برای چی میخوای؟

شاید بشه از یه کامپوننت بهتر برای مقضودت استفاده کرد تا ComboBox! یکم بیشتر توضیح بده
موفق و موید باشی

matinebi
جمعه 30 مرداد 1388, 16:26 عصر
با تشکر از همه دوستان عزیز با کدی که در پست 9 نوشتم مشکل کار با کامپوننت حل شد.

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

خوب ببینید کاربر میخواد لیست اجناسی که ثبت کرده(کالاهایی که موجود در مغازه داره) رو پرینت بگیره و به همکارانش بده(لیست کالاهایی آماده برای فروش) حالا میخواد اگه خواست، چند قلم از اجناسش در پرینت نباشند برای همین منظور من تصمیم گرفتم که از کمبوباکسی همراه چک باکس استفاده کنم تا هر کدام از اجناس را که خواست(البته نه تک تک اجناس بلکه کمبو به نوع اجناس متصل است) در پرینت قرار دهد
(به فرض در مغازه کامپیوتر فروشی کاربر نمیخواد موس و کیبرد در لیست اجناس آماده برای فروش موجود باشه)

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

tdkhakpur
جمعه 30 مرداد 1388, 21:03 عصر
خوب شما برنامه را کمی وسیعتر کرده و یک فرمی جهت این کار اتخاذ کنید تا در داخل اون فرم اجناسی را که مد نظر کاربر هست را بتوانید کنترل کنید.(یک لیست باکس برای تعیین وضعیت اجناس)
و در حین چاپ با توجه به وضعیت مربوط به آن جنس روی چاپ بیاورید.

matinebi
شنبه 31 مرداد 1388, 03:35 صبح
در حین چاپ؟؟؟
میشه بیشتر توضیح دهید

و چطور از لیست باکس برای این منظور استفاده کنم

tdkhakpur
شنبه 31 مرداد 1388, 11:59 صبح
در حین چاپ؟؟؟
میشه بیشتر توضیح دهید

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


کالا در انبار موجود است
کالا به حد کافی موجود نیست
کالا قابل فروش نیست
کالا در پرینت قابل دسترسی نباشد(البته این نظر خودتان هست)
و
سایر موارد دیگر که خودتان میتوانید به لیست بیفزایید

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