# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ASP.NET Web Forms > گفتگو: پیاده سازی سبد خرید با Session (دانلود کنید)

## ezamnejad

سلام
چند روز بود که دنبال یک روش خوب برای ایجاد سبد خرید بودم که *اینجا* پیدا کردم . در این روش از Session استفاده شده و روش جالب و خوبی به نظر میرسه . پیاده سازی این روش با Generic ها انجام شده و از سه کلاس برای کارهای مختلف استفاده شده . (در آدرس فوق یک نمونه برنامه هم وجود داره که بدون استفاده از دیتابیس نوشته شده است)
یک برنامه نمونه با این روش نوشتم که شامل موارد زیر : 
اضافه کردن به سبد خرید ( در صورتی که روی یک کالا بیش از یکبار کلیک شود فیلد تعداد اضافه می شود .)تغییر فیلد تعداد به صورت دستی (در صورت ورود عدد صفر رکورد حذف می شود)محاسبه و نمایش مبلغ یک کالا و مجموع همه کالاهاایجاد کد پیگیری
در این برنامه تمرکز کار بیشتر بر روی سبد خرید بوده و برای استفاده نهایی باید کدهای بیشتری  اضافه کنید .
*برای ذخیره اطلاعات در کوکی به جای session ابتدا فایل پست شماره 3 را دانلود کنید سپس کلاس ِ ShoppingCart که در پست شماره 9 قرار داره را دانلود و جایگزین کنید .*

----------


## raziee

مرسی .
خوب بود آقا

----------


## ezamnejad

سلام
بعد از بررسی بیشتر برنامه به این نتیجه رسیدم که برنامه کارآیی لازم را ندارد و یک مشکل در برنامه وجود داره . 
در این برنامه از الگوی Singleton استفاده شده یعنی فقط یک نمونه از کلاس ایجاد می شود و همه اطلاعات در این نمونه ذخیره می شود در واقع اطلاعات درون session ذخیره نخواهد شد . برای بررسی این موضوع برنامه را در مرورگرهای مختلف مثل FireFox و IE همزمان باز کنید میبینید که اطلاعات کارت هر دو به یک صورت خواهد بود . 
نحوه رفع این مشکل در منبع اصلی مقاله هم (پست های آخر) گفته شده که من تغییرات را انجام دادم و دوباره آپلود کردم . تغییراتی در کلاس ShoppingCart اعمال شده و نحوه استفاده از آن درون فرمها اندکی تغییرات دارد .
*در ضمن امکان انتخاب چند مورد از کارت (GridView) و حذف همزمان آنها هم اضافه شد .*

----------


## rahelan

سلام خیلی ممنون بابت برنامه 
دانلود کردمش
با برنامه ی Visual Web Developer 2005 Express Edition  اجراش کردم
اما یه پیغامی میده که ازش عکس گرفتم و ضمیمه کردم
اگه میشه کمکم کنید که چطور با موفقیت میتونم این برنامه رو تو این نرم افزار اجرا کنم
خیلی ممنونم

----------


## rahelan

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

لطفا كمكم كنيد

----------


## ezamnejad

سلام
شما باید ایتدا دیتابیس را که توی پوشه database قزار داره attach کنید بعد کانکشن را ست کنید . چون امکان اتصال به بانک وجود نداره این پیغام نمایش داده میشه . sql2000 یا 2005 نصب کنید بعد attach کنید .

----------


## rahelan

خيلي ممنون از لطفتون  :لبخند: 
sql2005 نصب دارم رو سيستمم
اما زياد از اين برنامه ها سر در نميارم
اگه طريقه ي attach كردن رو بگيد ممنون ميشم آقاي عظام نژاد

----------


## ezamnejad

> خيلي ممنون از لطفتون 
> sql2005 نصب دارم رو سيستمم
> اما زياد از اين برنامه ها سر در نميارم
> اگه طريقه ي attach كردن رو بگيد ممنون ميشم آقاي عظام نژاد


توی management studio روی databases راست کلیک و کنید و گزینه attach را انتخاب کنید کادر attach databases باز میشه که باید بعد از کلیک دکمه add  دیتابیس را انتخاب کنید و ok بزنید . عکسها را هم ببینید .
در ضمن لطف کنید عکسی که توی پست شماره 5 قرار دادید را  یا اندازه اش را کم کنید یا حذفش کنید چون اندازه بزرگی داره و نظم تاپیک را بهم زده . توی پست شماره 4 هم همون عکس وجود داره .

----------


## ezamnejad

سلام
با تغییراتی که در کلاس ShoppingCart ایجاد کردم امکان ذخیره اطلاعات در *کوکی* هم فراهم شد . دوستانی که قبلا دانلود کردند (*پست شماره 3*) فقط کافیه این فایل را جایگزین کنند . یک کوکی به نام ShoppingCart ایجاد میشه که اطلاعات سبد خرید را نگهداری میکنه . 
یک متد جدید به نام RemoveCart برای حذف کوکی اضافه شده در برنامه نمونه و فرم Factor.aspx به جای کد 

ShoppingCart.GetShoppingCart().Items.Clear();

از کد زیر استفاده کنید .

ShoppingCart.GetShoppingCart().RemoveCart();

----------


## rahelan

با سلام مجدد
ممنون از محبتتون
برنامه رو اجرا کردم
اما یه اروری میده که  ضمیمه کردم اگه میشه ببینید
اما اگه در این خط:
string strCon = "Data Source=(local);Initial Catalog=ShopTest;integrated security=true";
بجای  true از false استفاده بشه برنامه اجرا میشه
اما به این شکل میاد

اطلاعات داخل tabel ها فراخوانی نمیشه مثل اینکه
عکس رو ببینید.
نمیدونم چرا به این شکل میاد.
کمکم کنید که این برنامه رو درست اجرا بگیرم ممنون می شم :قلب:

----------


## rahelan

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

----------


## iman_22a

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


سلام - وقت بخیر .

چه بانکهایی روی سیستم نصب دارین و الان برای این برنامه از چه بانکی استفاده می کنین ؟ در ضمن local به کدوم بانک داره اشاره می کنه ؟

(به نظر میاد که شما نام دیتا سورس رو اشتباه می دین ، اگر از sqlexpress استفاده می کنین احتمالا نام دیتاسورستون  sqlexpress\.  باید باشه)

----------


## ezamnejad

> با سلام مجدد
> اطلاعات داخل tabel ها فراخوانی نمیشه مثل اینکه
> عکس رو ببینید.
> نمیدونم چرا به این شکل میاد.
> کمکم کنید که این برنامه رو درست اجرا بگیرم ممنون می شم


سلام
با تشکر از iman_22a . 
مشکل برنامه شما در ارتباط با دیتابیس هست . چون امکان اتصال به سرور میسر نیست این پیغام داده میشه .
باید نام سرور را درون کانکشن تغییر بدهید . همونطور که iman_22a گفتند احتمالا شما از sqlexpress استفاده میکنید که همراه vs نصب میشه . اگر اینطوره نام سرور را به جای (local) به sqlexpress\.  تغییر بدهید

----------


## rahelan

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

----------


## bahar_engineer

سلام 

از برنامه خوبتون ممنون من کاملاً صحیح روی vs2008 اجراش کردم و با sql  مشکلی نداشتم اما برای اینکه بتونم ازش استفاده کنم نیاز دارم به اینکه بانکش اکسس باشه 

هر کاری کردم نشد و موقع ورود به صفحه ای که سبد خرید رو نمایش می ده ، این خطا رو می ده که عکسشو ضمیمه کردم 


آیا راهی هست که من بتونم از این برنامه با بانک اکسس استفاده کنم ؟

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

اگه فکرم اشتباهه لطفاً بگین پس سشن ها اینجا چکاره اند

و اینکه من چطور گریدی رو پر کنم که از دو جدول از بانکم باید استفاده کنم و موقع بروز رسانی یا حذف هم باید قاعدتاً در دو جدول عملیات رو انجام بدم

ممنون می شم

----------


## bahar_engineer

کسی نبود جواب سوال منو بده؟ :افسرده: 

اصلاً یکی به من بگه توی صفحه view cart کانکشن ما به کدوم جدول متصل شده ؟ اصلاً لازمه گرید ویوی توی صفحه مشاهده سبد خرید، به بانک وصل بشه یا اینکه از طریق کوکی و سشن پر می شه؟

i'm Wating.....

----------


## ezamnejad

> کسی نبود جواب سوال منو بده؟
> 
> اصلاً یکی به من بگه توی صفحه view cart کانکشن ما به کدوم جدول متصل شده ؟ اصلاً لازمه گرید ویوی توی صفحه مشاهده سبد خرید، به بانک وصل بشه یا اینکه از طریق کوکی و سشن پر می شه؟
> 
> i'm Wating.....


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

----------


## tita206

سلام .شما که پست مفید سبد خرید و گذاشتید کاش یه کم کدهاشو هم توضیح میدادید.من توش sql data source ی ندیدم و یه خورده گیج شدم.
میتونم خواهش کنم یه نمونه سبد خرید با C#‎ , sqlserver2005 برام بفرستید به ایمیلم.
برا استفاده تو پایان نامه م میخوام نه تجاری....
من نمیتونم درک کنم چطوری برا هر نفر جداگانه با استفاده از یک جدول سبد که برای تمام مشتریان مشترک است، یک جدول سبد شامل چندین رکورد باید ایجاد کنم.در واقع نحوه ی افزودن هر کالا به لیست کالاهای قبلی
ممنونتون میشم اگه کمکم کنید. تنکس
email: tita_azad2000@yahoo.com

----------


## slashslash2009

سلام .
من با asp 2008 یک سبد خرید طراحی کردم که در نوعه خودش بی نظیره و اونو با 
PreviousPage.FindControl درست کردم و از هیچ دیتا بیسی تا آخرین عملیات یعنی زدن دکمه ثبت استفاده نکردم به نظرم این کار درست نیست که وقتی مشتری کالایی رو به سبد اظافه میکنه اونو در یک فایل ثبت کنه و باید در آخرین مرحله این کار صورت بگیره فکر کنم اینجوری سرعت هم زیاد میشه

----------


## hamid1988

از دوستان یکی لطف کنه و در مورد کد کلاس هایی که  ezamnejad  نوشته اند کمی توضیح بده!
ممنون

----------


## persianspam

> سلام .
> من با asp 2008 یک سبد خرید طراحی کردم که در نوعه خودش بی نظیره و اونو با 
> PreviousPage.FindControl درست کردم و از هیچ دیتا بیسی تا آخرین عملیات یعنی زدن دکمه ثبت استفاده نکردم به نظرم این کار درست نیست که وقتی مشتری کالایی رو به سبد اظافه میکنه اونو در یک فایل ثبت کنه و باید در آخرین مرحله این کار صورت بگیره فکر کنم اینجوری سرعت هم زیاد میشه


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

----------


## sousan

در EditShop اگر مشتری در تکست باکس مربوط به تعداد ، مقداری بیشتر از موجودی فروشگاه وارد کند چگوانه باید این مشکل را کنترل کرد ؟
فاکتور مشتری چگونه باید به مدیر سایت نشان داده شود ؟

----------


## sousan

کسی از اساتید نیست راهنمایی کنه؟؟؟
خواهش می کنم یه کمکی، راهنمایی ، نظری چیزی...........

----------


## صادق صدقی

وقتی نمایش کارت رو می زنم View card 
تویه grid view نام محصول رو نمایش نمی ده چرا؟

----------


## صادق صدقی

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

جزئیات رو می تونید تویه این تاپیک ببینید

فایل رو هم ضمیمه کردم



---------------------------------------------------------------
کتاب های  فارس ASP.NET

----------


## yardel

سلام دوست عزیزم.

من در ایجاد سبد خرید با توجه به Sample شما به مشکل شکل زیر برخورد کردم . لطفا کمکم کنید. چند وقتی بدجوری گرفتار این قضیه شدم

----------


## صادق صدقی

پارامتری که ارسال کردی نوعش فرق می کنه با پیش فرض
که تویه سبد خریده
نوشته دیگه
input string was not correct format

----------


## yardel

> پارامتری که ارسال کردی نوعش فرق می کنه با پیش فرض
> که تویه سبد خریده
> نوشته دیگه
> input string was not correct format


پارامتری که من (در سبد)ارسال کردم دقیقا مثل خود sample هستش یعنی از نوع String.و توی بانک هم از نوع nvarchar .حالا مشکل کار کجاست .لطفا بیشتر راهنمای کنید.

----------


## yardel

> سلام .
> من با asp 2008 یک سبد خرید طراحی کردم که در نوعه خودش بی نظیره و اونو با 
> PreviousPage.FindControl درست کردم و از هیچ دیتا بیسی تا آخرین عملیات یعنی زدن دکمه ثبت استفاده نکردم به نظرم این کار درست نیست که وقتی مشتری کالایی رو به سبد اظافه میکنه اونو در یک فایل ثبت کنه و باید در آخرین مرحله این کار صورت بگیره فکر کنم اینجوری سرعت هم زیاد میشه


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

----------


## صادق صدقی

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

----------


## shahab2005

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

----------


## yardel

> سلام .
> من با asp 2008 یک سبد خرید طراحی کردم که در نوعه خودش بی نظیره و اونو با 
> PreviousPage.FindControl درست کردم و از هیچ دیتا بیسی تا آخرین عملیات یعنی زدن دکمه ثبت استفاده نکردم به نظرم این کار درست نیست که وقتی مشتری کالایی رو به سبد اظافه میکنه اونو در یک فایل ثبت کنه و باید در آخرین مرحله این کار صورت بگیره فکر کنم اینجوری سرعت هم زیاد میشه


آقا پس چرا برنامه ای که نوشته اید به کسی نمی دید.؟فقط تعریف بود

----------


## ندااحمدی

چطر میتوان در برنامه شما یک آیکون سبد خرید گذاشت که برای بار اول در ان کلیک کرد پیغامی دهد که سبد کالا شما خالی است و با کلیک کردن در دفعات بعد محصولات انتخاب شده را نمایش دهد

----------


## hjran abdpor

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

----------


## ندااحمدی

از session استفاده میکنم میشه بگید شرط چجوری باید بنویسم
*
*

----------


## hjran abdpor

با سلام .
خوب بگید اگه خالی نباشه فلان کار را کن در غیر اینصروت یک پیغام بهش نشون بده.
این یک نمونه مثال برای سبد خرید است که از سشن استفاده کردم امیدوارم به درتون بخوره :

DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("NameKala", typeof(string)));

            dt.Columns.Add(new DataColumn("Price", typeof(string)));

            dt.Columns.Add(new DataColumn("Dec", typeof(string)));
            dt.Columns.Add(new DataColumn("Pic", typeof(string)));

            DataRow dr = dt.NewRow();

            dr["NameKala"] = txtbox2.Text;
            dr["Price"] = txtbox.Text;
            dr["Dec"] = txtbox1.Text;
            dr["pic"] = txtbox3.ImageUrl;

            dt.Rows.Add(dr);

            this.GridView3.Visible = false;

            GridView3.DataSource = dt;
            GridView3.DataBind();


            //Label11.Text = Session["Price_"].ToString() + Session["Dec_"].ToString() + Session["NameKala_"].ToString();

            Session["grid"] = dt;
            Label11.Text = "محصول شما به سبد خرید اضافه شد ";
            Label12.Visible = false;
            Label12.Text = Session["Code_"].ToString();

        }
        else
        {
            Label12.Text = "لطفا وارد سایت بشوید ";
        }



protected void Page_Load(object sender, EventArgs e)
    {
        MultiView1.ActiveViewIndex = 0;
        if (Session["grid"] != null)
        {
            DataTable d = (DataTable)Session["grid"];
            GridView2.DataSource = d;
            GridView2.DataBind();

        }
        else
        {
            Response.Redirect("Default.aspx");
        }
        
    }

----------


## angel farahani

با سلام ، من از اس کیو ال 2008 استفاده میکنم ، میخوام دیتابیسی رو که در این پروژه گذاشتین را ببینم اما پیفام خطا میده و attach نمیشه . لطفا راهنماییم کنید که لااقل بتونم از کلاس ها و کدهای نوشته شده در پروژه ام استفاده کنم . چون واقعا به کدهای سبد خرید نیاز دارم  . ممنونم

----------


## amir_T_2008

سلام دوستان یک سوال داشتم ممنون میشم پاسخ بدید

مشکلم اینه من میخوام تمام گروهایی که دارم نشون بده اما در این قسمت که تو صفحه default موجوده

 WHERE GroupID = 2", con);

فقط اطلاعات گروه 2 میاره در صورتی که من میخوام اونایی بیاره که id با id که پست شده یکی بود بیاره ولی نمیشه

ممنون میشم کمک کنید

----------


## hicamcctv

دوستان من هر کاری می کنم نمیتونم سبد خرید به سایتم اضافه کنم اگر کسی از دوستان کمک کنه ممنون میشم . 
این سایت منه . 
دوربین مدار بسته

----------

