PDA

View Full Version : ساخت یک سبدخرید



ajahan
یک شنبه 08 خرداد 1390, 18:00 عصر
سلام دوستان
من می خوام تو پروژه ام یه سبد خرید داشته باشم ولی درموردش ذهنیتی درست ندارم.
یه کارایی کردم ولی می خواستم بدونم کسی هست که اشکالامو ازش بپرسم؟
حالا بگم چیکار کردم:
من می خوام خرید نسخه دارو رو اینترنتی انجام بدم. به این صورت که یه گریدویو دارم که داروهای نسخه ی بیمارو نشون میده و یه Item Template(LinkButton) برای هر سطر دارم که اون دارو رو به سبد خریم اضافه میکنه(این سبد خرید هم گریدویوی داینامیکیه با یک ستون نام دارو و یک Item Template برای حذف کردن اون دارو از سبد خرید و بازگشت به لیست قبلی داروهاست(منظور همون گریدویو اولیه است)).
حالا من میخوام وقتی دکمه اضافه کردن به سبد خرید رو میزنم اون دارو تو گریدویو نشون داده نشه(نمی خوام حذف بشه ها، چون اگه کاربر دکمه حذف از سبد خرید رو بزنه من دیگه اون سطر از اطلاعات رو ندارم که برگردونم سرجاش) و به جاش توی سبد خریدم نشون داده بشه.
واقعا تو این مورد گره خوردم!
نمی دونم توضیحاتم واضح بود یا نه ولی اگه کسی برنامه نویسیش خوبه کمکم کنه(در صورت نیاز می تونم بیشتر توضیح بدم)، این پروژه پایان دورمه!!!!!

خیلی ممنون.

zahraf
یک شنبه 08 خرداد 1390, 22:49 عصر
دوست عزيزم
من قبلا براي درس طراحي صفحات وب يك فروشگاه اينترنتي پياده كردم و بنابراين تا اونجايي كه ميدونم شما بايد براي سبد خريدتون (كه كاربر با زدن دكمه ي اضافه به سبد خريد به اون سبد كالا اضافه بشه) از session استفاده كنيد نه از گريدويو چون كارتون چند برابر ميشه آيا ميدونيد چه جوريه يا منظورتون چيز ديگه ايه؟

ajahan
دوشنبه 09 خرداد 1390, 12:16 عصر
راستش منظورتونو از استفاده از Session تو این مورد نمی دونم. میشه بیشتر راهنماییم کنید؟
ممنون میشم دوست عزیز که برام بیشتر توضیح بدید
یا اگه براتون مقدوره ایمیلتونو بدید که از اون طریق بیشتر باهم ارتباط داشته باشیم.

zahraf
دوشنبه 09 خرداد 1390, 12:31 عصر
دوست عزيزم من تخصص خيلي زيادي هم ندارم كه بخواهيد از من كمك بگيرين اينجا اساتيد خيلي بزرگتر از من هست كه باهاشون از طريق ايميل در ارتباط باشين اما اگر كاري از دستم بر بياد خوشحال ميشم كمكتون كنم ايميلتون رو با پيام خصوصي ارسال كنيد.

و اما در مورد سبدخريد:

سژن يك حافظه ي موقت در برنامه هاي تحت وب هست كه براي ذخيره ي موقت اطلاعات ازش استفاده ميشه و تقريبا در تمامي وب سايتها كاربرد داره. اين حافظه ي موقت ميتونه يك رشته يا يك عدد و يا حتي يك كلاس باشه.
در مورد مثال شما session ما يك كلاس خواهد بود مي تونيد اسمشو bag بذارين ادامه ي توضيحاتم رو جمع بندي ميكنم و در پست بعدي ميارم شايد با يك كار عملي .

dontspeak
دوشنبه 09 خرداد 1390, 13:19 عصر
پیرو گفته های دوستمون zahraf
session می تونه مقدارهای مختلفی رو نگه داره که چند موردشو ایشون گفتند. برای این موضوع شما می تونید یه دکمه select واسه هر ردیف بزارید. بعد با انتخاب اون دکمه اون مقدار به session اضافه بشه. حالا فرض کنید که چند مورد رو انتخاب کردید و ما این session رو از نوع string در نظر میگیریم داده های توی session این میشه (مثلا)
daroye1, daroye2, daroye3
خوب حالا توی گرید ویوی جدید که قرار لیست دارو های انتخاب شده رو نشون بده دستور whrere رو طوری انتخاب کن که این session توش قرار بگیره.
متوجه میشی یا بیشتر توضیح بدم. از این قسمت گرید و sql می گذرم چون احتمالا می دونی اگرم نمی دونی بگو تا بیشتر توضیح بدم.
اما در مورد session استفاده از session از استفاده یه متغر ساده هم آسون مثلا شما می خوای مقدار یه txtbox رو داخل یه session قرار بدی و توی یه صفحه دیگه ازش استفاده کنی کافیه این کدو برای قرار دادن مقدار textbox توی صفحه اول وارد کنی
session["name"]=textbox1.text
توجه کن که بجای name هر چیزی می تونی قرار بدی این فقط مثل تعریف متغیر، فقط اسم واسش هست چون هرجا بخوای از این session استفاده کنی باید از این اسم استفاده کنی. حالا باید بری توی صفحه دوم که می خوای از این session استفاده کنی توی این صفحه هم بخاطر اینکه این مقدار رو توی یه لیبل نشون بدی کد زیر رو وارد میکین
label.text=session["name"].tostring()
می بینی که استفاده ازش خیلی آسونه.
میدونم که الان داری با خودت کلانجار میری که بهتر درک کنی پس بزار یه سوال بپرسم تا در کنی. فرض کن شما یه پروژه وب متشکل از دو صفحه داری می خوای از یه صفحه یه مقداری رو بگیری توی صفحه دیگه استفاده کنی مثل همین txtbox بالا برای این موضوع چکار می کنی؟ اینجاست که session بکارت میاد. بازم هرجاییشو گیر داشتی بگو
موفق باشی

zahraf
دوشنبه 09 خرداد 1390, 14:07 عصر
دوست عزيزم ميخواستم پروژمو اينجا بذارم اما حجمش زياده و متاسفانه نتونستم

اول از همه شما بايد يك كلاس ايجاد كنيد به اسم bag يا ... با اين اطلاعات:


///<summary>
/// Summary description for kala
///</summary>
public class bag
{
public bag()
{
//
// TODO: Add constructor logic here
//


}
public string name;
public int count;
public int price;
public int id;


}
بعد از اين كار اولين كاري كه بايد بكني اينه كه كاربر زمانيكه كالايي رو از گريدويو انتخاب ميكنه اطلاعات اون كالا با زدون يك دكمه ي اضافه به سبد خريد به سژن سبد خريد اضافه بشه پس در رويداد كليك اون دكمه اينو بنويس:


protected void ButtonAddToBag_Click(object sender, EventArgs e)
{

try
{

ArrayList a;

{
a = (ArrayList)Session["bag"];
bag c = new bag();
c.name = GridView1.SelectedRow.Cells[1].Text;
c.price = Convert.ToInt32(GridView1.SelectedRow.Cells[3].Text;);
c.count = Convert.ToInt32(TextBoxTedad.Text);
c.id = Convert.ToInt32(GridView1.SelectedRow.Cells[0].Text;);
a.Add(c);
}
else
Label8.Text = "امكان اضافه كردن به سبد خريد وجود ندارد";
}
catch
{
}
}




خوب بعد از افزودن اطلاعات در صفحه اي كه قراره سبد خريد نمايش داده بشه يك ليست باكس يا گريدويو يا هر چيز ديگه اي ميذاري و اطلاعات سژن رو در داخلش ميريزي من به دليل راحت تر بودن ليست باكس از اون استفاده كردم
در لود صفحه تابع فيل ليست باكس رو احضار ميكني و خود تابع هم اينه:
كه جمع كالاهاي انتخاب شده توسط كاربر ور هم در يك ليبل نمايش ميده



private void filllistbox()
{
LabelSum.Text = "";
sum = 0;
ListBox1.Items.Clear();
ArrayList a;
a = (ArrayList)Session["bag"];
foreach (bag c in a)
{
ListBox1.Items.Add("نام: " + c.name + " " + "تعداد: " + c.count + " " + "قیمت: " + c.price);
sum = sum + c.count * c.price;
LabelSum.Text = Convert.ToString(sum);



}

zahraf
دوشنبه 09 خرداد 1390, 14:11 عصر
درج در ديتابيس:

حالا براي درج اطلاعات در ديتابيس به اين صورت عمل ميكنيم:



public static string cnStr = "Data Source=…\\SQLEXPRESS;Initial Catalog=…;Integrated Security=True";


SqlConnection con = new SqlConnection();
con.ConnectionString = cnStr;
SqlCommand insCmd = new SqlCommand();
insCmd.Connection = con;
insCmd.CommandType = CommandType.Text;



con.Open();


ArrayList a;
a = (ArrayList)Session["bag"];
foreach (bag c in a)
{
insCmd.CommandText = "Insert Into sefaresh (name,tel,city,pcode,date1,gender,price,num) Values(N'" + TextBox1.Text + "'," +int.Parse(TextBox2.Text)+ ",N'" + TextBox3.Text + "',N'" + TextBox7.Text + "',N'" + TextBox8.Text + "',N'" + c.name + "'," + c.price + "," + c.count + ")";
insCmd.ExecuteNonQuery();
}


con.Close();


كه اينجوري تك تك كالاها در ديتابيس درج ميشه

و حالا اگر ميخواهي كاربر بتونه با انتخاب يك كالا از ليست باكس و زدن دكمه ي حذف اين كالا از خريدت كم بشه يه دكمه اضافه كن و در رويداد كليكش بنويس:

protected void Button_Delete (object sender, EventArgs e)
{
ArrayList a;
a = (ArrayList)Session["bag"];
if (ListBox1.SelectedIndex != -1)
{
a.RemoveAt(ListBox1.SelectedIndex);
Session["bag"] = a;
filllistbox();


}
پست dontspeak رو نديدم وگرنه اين همه تايپ نميكردم!
چون اطلاعات خوبي دادند
اميدوارم سؤال شما رو درست متوجه شده باشيم ؟!!

ajahan
سه شنبه 10 خرداد 1390, 11:07 صبح
سلام دوستان
خیلی ممنونم
من از session تو پروژه ام استفاده کردم و می دونم که چه جوری استفاده میشه، فقط می خواستم طرز استفاده از اونو تو این مورد بدونم.
راستش پروژه من کوئری های پیچیده زیاد داره و بیشتر سر اوناست که بقیه کارام به مشکل برخورده.
در هر صورت خیلی لطف کردید که جواب دادید، ان شاالله تغییراتی که لازم بود رو اعمال می کنم و اگه مشکلی داشتم مطرح میکنم.
در پناه حق:لبخندساده:

Slytherin
سه شنبه 10 خرداد 1390, 16:25 عصر
دوستان من توی یک ویدیو آموزشی دیدم که Session ها فشار زیادی روی سرور میارن، بهتر نیست به جای Session در پیاده سازی سبد خرید از کوکی استفاده شود؟!

dontspeak
سه شنبه 10 خرداد 1390, 19:07 عصر
دوستان من توی یک ویدیو آموزشی دیدم که Session ها فشار زیادی روی سرور میارن، بهتر نیست به جای Session در پیاده سازی سبد خرید از کوکی استفاده شود؟!
کوکی در حالت معمولی از session بهتره. منتهی اگه بخوایم یه سری اطلاعات رو توی یه جلسه نگه داریم و اون اطلاعات مهم باشند بهتره که از session اصتفاده کنیم. میدونیم که session ها در سمت سرور اجرا میشوند پس امنیت بیشتری دارند. در غیز اینصورت به نظر من از کوکی ها استفاده کنیم بهتره

Slytherin
سه شنبه 10 خرداد 1390, 23:19 عصر
کوکی در حالت معمولی از session بهتره. منتهی اگه بخوایم یه سری اطلاعات رو توی یه جلسه نگه داریم و اون اطلاعات مهم باشند بهتره که از session اصتفاده کنیم. میدونیم که session ها در سمت سرور اجرا میشوند پس امنیت بیشتری دارند. در غیز اینصورت به نظر من از کوکی ها استفاده کنیم بهتره

من هم به همین خاطر عرض کردم، اطلاعات سبد خرید فکر نمی کنم که چندان مهم باشند و نیاز باشد که چنین فشاری به سرور بیاید...

jigily
چهارشنبه 03 خرداد 1391, 13:20 عصر
اين روشي كه شما گفتيد من ميرم اما بايد مواردي كه توي كلاس تعريف ميشه به صورت ليست باشه تا تو بتوانيم توي session به صورت ليست ذخير كنيم؟
بعدشم اينكه اين نميدونم كه توي هر سشن فقط يك ليست در آن واحد ذخيره ميشه؟ يعني اينكه اگه كاربر دو تا كالا را انتخاب كنه كالايي كه آخر انتخاب كرده توي ليست سشن ميمونه؟