PDA

View Full Version : سوال: نحوه نوشتن کد بصورت بهینه



daneshmand1
چهارشنبه 15 تیر 1390, 12:37 عصر
سلام
من توي برنامه يك فرم جستجو دارم. تو اين فرم 11 تا چك باكس هست كه كاربر مي تونه شاخص هاي جستجو را انتخاب كند با زدن دكمه جستجو برنامه بايد بر اساس چك باكس هايي كه كاربر انتخاب كرده جستجو رو انجام بدهد. اگر بخواهم از دستورات if و else استفاده كنم بايد 2 به توان 11 تا دستور if داشته باشم. كسي راه حل ديگه اي به نظرش ميرسه؟
با تشكر

mahdi bg
چهارشنبه 15 تیر 1390, 18:52 عصر
سلام
یه آرایه 11 تا در نظر بگیرید اولش همه false هستن
روی هر کدوم که event مربوط به چک فعال شد ، مقدار متناظر ارایه اش رو true کن و ...

موفق باشید

Rejnev
چهارشنبه 15 تیر 1390, 19:47 عصر
میخوای کجا رو سرچ کنی؟ اگه دقیق تر میگفتی نه وقت بچه گرفته میشد و هم اینکه زودتر به جواب میرسیدی
اگه بخوای مثلا rowfilter دیتاتیبل رو مقدار بدی (توی datatable جستجو کنی) کلیت کار به این صورت میشه:

string q="1=1 ";
if(chk1.Checked)
{
q+=" and name='mohammad' "
}
if(chk2.Checked)
{
q+=" and family='hoseini' "
}
//...
datatable.RowFilter=q;


اگه یک موقع خواستی مثلا به یک stored procedure توی دیتابیست تعداد زیادی پارامتر جستجو پاس بدی اینطوری میتونی عمل کنی:


create proc myProc
@name nvarchar(50), @family nvarchar(50) , @age
as
begin
select name , family , age
from person
where
(@name is null or name=@name) and
(@family is null or family=@family) and
(@age is null or age=@age)
end

توی سی شارپ هم میتونی به این شکل روال رو اجرا کنی:

string q=" exec myproc "
q+=chk1.Checked ? "ali": "default";
q+=chk2.Checked ? ",hoseini": ",default";
q+=chk3.Checked ? ",20" : ",default";
//use this query in and ExecuteRead command

وقتی از عبارت default توی پاسکاری استفاده کنی، مقدار پیشفرض (که توی اون روال null هست) استفاده خواهد شد.

mmd2009
چهارشنبه 15 تیر 1390, 22:46 عصر
با سلام

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


list<string> shakhes = new list<string>();
SELECT * FROM tblShakhes WHERE shakhes IN (" + shakhes.Join(", ") + ")";

daneshmand1
پنج شنبه 16 تیر 1390, 09:42 صبح
با سلام

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


list<string> shakhes = new list<string>();
SELECT * FROM tblShakhes WHERE shakhes IN (" + shakhes.Join(", ") + ")";




ببخشيد ميشه بيشتر راهنمايي كنيد.
من مي خوام جستجو رو توي يكي از جداول پايگاه داده انجام بدم. وقتي كاربر شاخص هاي جستجو را انتخاب ميكنه بعد بايد مقدار فيلد هاي شاخص رو هم پر كنه، مثلا با انتخاب شاخص استان بايد مقدار استان مورد نظر را در تكس باكس مربوطه وارد كنه بعد دكمه جستجو رو بزنه. چطور بايد مقدار اين تكس باكس ها رو توي دستور بيارم؟
با تشكر

daneshmand1
شنبه 18 تیر 1390, 13:15 عصر
كسي نمي تونه به من كمك كنه؟