الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مثال لسلة شراء الكترونية

مغلق
بدأه محمد خليل أبو صلاح في 17 أكتوبر 2005 · 28 رد · 10,924 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم..

أرفقت مثالا قمت بإعداده البارحة عن فكرة متجر بسيط جدا من ناحية التصميم يعرض التصنيفات و عند الضغط على تصنيف تظهر المنتجات و منها يمكن الإضافة لسلة الشراء.

طبعا الموضوع قام بتغطية العديد من الأفكار مثل :

-استخدام الكلاسات للتصنيفات و المنتجات و سلة الشراء.

-استخدام ال User Controls

-حيل و أفكار تساعد على فهم بناء التطبيقات الشبكية بشكل أكبر.

-استخدمت لسلة الشراء DataTable مخزن في Session عالجت فيه أغلب أفكار ال DataTable حتى نكون استفدنا شيئا مع الموضوع!

عليكم فقط قراءة الكود و فهمه جيدا و أنا أنصح بالبدء في قراءة الكلاسات كلا على حدة و من ثم الانتقال للصفحات و الأدوات

و أي نقطة غير مفهومة سأرد عليها في أوقات تواجدي على النت

طبعا التقنية:ASP.NET

اللغة: #C

نصيحة : إن وجدت أن الفكرة صعبة لا تيأس .. والسبب أن هذا المثال سيفيدك جدا جدا و يجعلك عمليا بشكل أكبر و إن أردت الوصول عليك بالتعب :)

تحياتي لكم

ArabTeamStore.zip

You can fly while you can touch the sky

#2

الاخ محمد

جزاك الله خيرا على كل جهودك القيمة في المنتدى

يا حبذا لو ترسل شفرة الداتابيس او ما يحتاجه المشروع من جداول و استورد برسيدر و غيرها .... الظاهر انك نسيتها و لم ترسلها (-:

just generate the DB script...

salam

Quran_Signature.jpg
#4

أرفقت ال Script الخاص بقاعدة البيانات

ArabTeamStoreDb.zip

You can fly while you can touch the sky

#5

هل قام أحد بتجربة المثال حتى الان؟؟

You can fly while you can touch the sky

#6

الموضوع جميل و لكن ال Sql Script المرفق ليست أفضل طريقة لارفاق الDatabases من نوع الSql Server حيث أنه يحمل الSchema فقط دون أي معلومات مخزنة و هذا يجعل المشروع لا يعمل بكفاءة حيث أن الصفحات المبرمجة لا تتيح كتابة بيانات جديدة

من الاخر استخدم Back Up Database بدلاً من Generate SQL Script

و هذا Backup من الDatabase

database.rar

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#7

السلام عليكم ورحمة الله وبركاته ...

جزاك الله خيراً على هذه الأفكار البسيطة والهامة بنفس الوقت ...

اطلعت على جميع عناصر المشروع ولي بعض الأسئلة:

1 - بالنسبة للصف database كيف أستطيع معالجة الاستثناءات هنا ... فهل يكفي أن أضع التعليمات try -- catch في المكان الذي أتوقع أن يحدث فيه خطأ أما هناك طريقة أفضل من ذلك ...

2 - هناك أمر دائماً يواجهني ولا أجد له إجابة وهو, كيف أستطيع أن أفتح Connection واحد فقط للمشروع ولجميع الصفحات وبعد انتهاء تحميل كافة معلومات الموقع يتم إغلاق الـ Connection...

يعني مثلاً أفتح الـ Connection في الـ Header مثلاً وأغلقه في الـ Footer أو في عند آخر تعليمة تستخدم قاعدة البيانات ... مما يوفر عمليات الاتصال بقاعدة البيانات... طبعاً هنا أسأل عن كيفية عمل ذلك باستخدام الصف DataBase في المشروع...

3 - التابع GetProductData في الصفحة ShoppingCart.ascx.cs ليس له عمل, صحيح ؟

#8

السلام عليكم

ما رأيك يا محمد تفك الكود هنا ؟

يعني توضح جزئياته فهذا سيكون تأثيره أفضل للذين لا يعرفون asp.net أو أنهم مبتدئون مثلي

جزاك الله خيراً :)

#9

أولا شكراا لمن قام بالمشاركة ....... ردي على النحو التالي :

بالنسبة للأخ السائل عن ملف ال DB أعتقد أن ال Schema تكفي و يمكنك يدويا إضافة أقسام ومنتجات فالأمر سهل و شكرا لك لأنك أرفقت قاعدة بيانات ..

الأخ محمد النحراوي ... تكرم رح أحاول أشرح جزئيات من المشروع أو على الأقل أتطرق للنقاط التي أراها مهمة و تغيب عنا.

الأخ اسماعيل عنجريني إسمحلي بأن أحييك لما رأيت فيك من حب الإجتهاد كما عهدتك دائما و سأجيب على أسئلتك أولا ...

1- يمكنك التعامل مع الاستثناءات Exceptions عن طريق Try-Catch كما ذكرت على الأقل هنا لأن المثال له قيود معينة كي لا يخرج عن نطاق المبتدئين و لكن عندما تعمل بنمط متقدم ستجد نفسك قادرا على عمل كلاس مستقل لاستقبال الأخطاء سواء من السيرفر أو من العميل في كلاس مستقل و تخزينها إن أردت في ملف Log File.

2- بخصوص التقليل من استهلاك موارد السيرفر من خلال التحكم بالإتصال فذلك سيكون سهلا إن قمت بعمل كلاس خاص بالإتصال بقاعدة البيانات يحوي جميع العمليات التي تحتاجها و في نهايته تقوم بعمل Dispose لهذا الكلاس و يمكنك العودة لمشروع المتجر الإلكتروني و رؤية مثال الأخ مدني الرائع في هذا الموضوع.

3- بخصوص التابع GetProductData فلا يوجد شيء إسمه لا استخدام له .. أنا عرفت الدالة من نوع Public حتى أتمكن من الوصول لها من خلال ال HTML و أتفادى مشاكل ال Protection Level .

أنظر في ملف ShoppingCart.ascx ستجد بداخل ال DataGrid مكتوب التالي :

<ItemTemplate>
    <%#GetProductData((int)DataBinder.Eval(Container.DataItem,"pID"),"Name")%>
 	 </ItemTemplate>

بهذه الطريقة إستطعت أن أعرض إسم المنتج لأنني مررت ال Name كباراميتر ثاني للتابع حيث سأستخدمه في ال Case Statment

هكذا أكون رددت على جميع اسئلتك أخي ولو عندك المزيد تفضل ولا تتردد أبدا ..

شيء أخر أود أن تنتبهو له وانا قصدته عمدا ..

هناك مجلد رئيسي للمشروع و هناك مجلد Components و مجلد Controls مثلا و في الثلاث مجلدات يوجد كلاسات بإسم ShoppingCart.Cs والفكرة كالتالي :

لنفرض اننا داخل ملف في المجلد Controls و نود أن نعمل نسخة من الكلاس ShoppingCart المتواجد في المجلد Components فماذا نفعل ؟؟

من المنطقي ان نضيف ال NameSpace و نكتب التالي :

using ArabTeamStore.Components;

ShoppingCart cart=new ShoppingCart();

و هذا خطأ انتبهو له لأننا داخل كلاس أيضا أسمه ShoppingCart لكن من مجلد اخر فماذا نفعل لو أردنا ان نقوم بعمل نسخة لكلاس سلة الشراء الموجود داخل المجلد Components ؟

التالي :

ArabTeamStore.Components.ShoppingCart cart= new ArabTeamStore.Components.ShoppingCart();

حظا موفقا للجميع

You can fly while you can touch the sky

#10

بسم الله الرحمن الرحيم ..

سوف أقوم بتحليل ما كتبت قدر المستطاع .........

بداية أنا أرفقت ال SQL Script بالأعلى من أجل إنشاء قاعدة بيانات المتجر.

سوف نقوم بالإجماع على أشياء معينة أهمها ال NameSpace الخاصة بالمشروع

ملاحظة : يمكن معرفة المزيد عن ال NameSpaces من خلال الإنترنت ولكن بمفهو بسيط أود أن أقول بأن كل مشروع مستقل يعد بمثابة Namespace خاصة بك لها عدد من الصفحات والأدوات تمثل بكلاسات تابعة لهذا ال Namespace و هنا أخترت أن يكون ArabTeamStore و انتبهوا إلى أننا أخترنا لغة ال C# وبالتالي فهي لغة حساسة لحالة الحروف ..

مجلدات المشروع و ملفاته :

المجلد الرئيسية ArabTeamStore ويحوى على

ملف Default.aspx و ملحقاته و هو ملف الصفحة الرئيسية للمتجر.

ملف AddToCart وهو فقط يقوم بإضافة المنتجات للسلة و إن لم تكن السلة موجودة يقوم بإنشائها.

ملف Shopping Cart و هو ملف سلة الشراء التي تعرض المنتجات التي تم اختيارها في مرحلة الشراء.

أيضا هناك المجلد Controls داخل المجلد الرئيسي و يحوى فقط على User Controls نستخدمها في أكثر من مكان و به :

ملف Navigator و هو أداة User Controls تعرض شريطا يمكننا من التنقل داخل الموقع.

ملف Categories و هو يعرض التصنيفات الموجودة داخل الموقع.

ملف Products و يعرض المنتجات التابعة لكل تصنيف.

ملف ShoppingCart و هي الأداة التي تمثل سلة الشراء والتي نستخدمها في ملف ShoppingCart الموجود داخل المجلد الرئيسية و انتبهو للفرق بأن الملف الموجود داخل مجلد Controls امتداده ascx أما الموجود في مجلد المشروع الرئيسي فهو aspx.

المجلد Components هو أهم مجلد عندي و هو عبارة فقط عن مجموعة من الكلاسات التي نستخدمها في صفحات و أدوات مشروعنا في المجلدين المذكورين بالأعلى.

والكلاسات هي :

DataBase.cs عبارة عن كلاس يحوي العمليات المهمة للتعامل مع قاعدة البيانات.

Categories.cs و هو يخص التصنيفات الخاصة بالأقسام.

Products.cs و Product.cs تخص المنتجات.

ShoppingCart.cs لسلة الشراء.

في مشاركتي القادمة سأبدأ في الشرح و سأبدا من مجلد Components

You can fly while you can touch the sky

#11

كلاس Categories.Cs بداخل المجلد Components :

أولا سأكتب الكود

using System;
using System.Data;
using ArabTeamStore.Components;

namespace ArabTeamStore.Components
{

	public class Categories
	{
  private Database Db;
  private string category;
  private DataTable tblCategories;
  private DataRow rowCategory;
  public Categories()
  {
 	 this.Db = new Database();
 	 this.tblCategories = Db.GetDataTable("SP_GetCategories");
  }
  public DataTable TblCategories
  {
 	 get { return this.tblCategories; }
  }

	}
}

قمت بعمل مجموعة من المتغيرات و بعدها أنشأت Constructor و كما نلاحظ فإنه يحمل فقط إسم الكلاس و قمت بداخله بعمل نسخة من كلاس التعامل مع قاعدة البيانات ..

بعد ذلك قمت بجلب البيانات من خلال StoredProcedure لتعيد البيانات على شكل DataTable أسميته هنا tblCategories حيث تخزن البيانات بداخله.

بعد ذلك أضفت خاصية Property بإسم TblCategories تعيد DataTable يحوى التصنيفات داخل قاعدة البيانات ..

طبعا ال StoredProcedure و التي سأرمز لها بالشرح ب SP بها الكود التالي :

CREATE PROCEDURE SP_GetCategories AS
Select * From tblCategories Where disabled=0
GO

إلا أن أقوم بكتابة الكلاس التالي و شرحه لنا لقاء و حظا موفقا للمبتدئين .

ملاحظة : أنا هنا يهمني أن تكون الصورة واضحة من البداية .. لو كان هناك غموض او مشكلة في الشرح لا مانع من التوجيه و الإرشاد :)

1

You can fly while you can touch the sky

#12

الان سأشرح أهم كلاس و هو كلاس سلة الشراء .. ShoppingCart.Cs

قبل الدخول للكود .. فكرة الكلاس كالتالي : نقوم بعمل DataSet و نضع بها جدولا نحن نقوم بصنعه و ليس كمان تعودنا عندما نستخدم ال DataAdapter الذي يسقط البيانات في ال DataSet على شكل DataTable.

سوف يأتي في بالنا سؤال ذكي و مهم ..

كيف سنحفظ سلة الشراء ؟ أليس من الأفضل أن نستخدم Session داخل هذا الكلاس؟

صحيح ان ال Session هي الحل الأفضل لعدة أسباب :

1-قدرتها على حفظ البيانات أثناء التنقل في الموقع.

2-عندما يخرج المستخدم او الزبون سوف تلغى الجلسة و بالتالي فإن البيانات ستتطاير و ليس كما يفعل البعض بالخطأ حيث يقومون بإستخدام DataBase لحفظ المشتريات والتي لها عيوب كثيرة أبسطها لو ان المستخدم كيف سنقوم بحذف ما قام بحفظه في ال Temp Table في قاعدة البيانات ؟

ربما البعض يقول بأننا سنستخدم Guid و عمل فحص دوري كي نرى إن كان الزبون موجودا أو قد خرج وبالتالي سنقوم بمسح بياناته من خلال ملف Global.asax ..

صحيح لكن غلط بنفس الوقت .. لأننا نبحث دائما عن أسرع و أفضل الحلول تطبيقا لمفهوم ال Optimizing أي تحسين العمل ..

لكن ليس هنا دور ال Session .. لحفظ سلة الشراء ..

عندما نفكر في بناء InfraStructure او البنية التحتية لأي Business Component أو ما يطلق عليه ال BLL اختصارا لل Business Logic Layer يجب أن نفكر بفصل الكائنات عن بعضها البعض دون النظر او التفكير المطلق بال UI .. يجب أن نفكر بتكاملية الكلاس و استقلاليته "ولست اعني وجود حالات وراثة أو لا"

لو فكرنا في سلة الشراء .. كيف ستكون ؟

ممممممممممممم كلاس على شكل DataTable كما اتفقنا و من المنطق أنه يلزمنا إنشاء للسلة يعني الجدول و أيضا يلزمنا عمل طرق لإضافة و تعديل و حذف المنتجات داخل السلة ..

أيضا نحتاج لمعرفة محتوياتها و عددها أو سعرها الكلي ..

سأضع الكود أولا ثم سأقوم بشرحه

using System;
using System.Data;

namespace ArabTeamStore.Components
{

	public class ShoppingCart 
	{
  private DataTable tblCart;
  private DataRow row;
  private DataColumn column;
  private DataSet dsCart;
  public ShoppingCart()
  {
 	 this.tblCart=new DataTable("tblCart");
 	 this.dsCart = new DataSet();
 	 this.BuildCart();
  }
  private void BuildCart()
  {
 	 this.column = new DataColumn("pID",Type.GetType("System.Int32"));
 	 this.tblCart.Columns.Add(this.column);
 	 this.column = new DataColumn("quantity",Type.GetType("System.Int32"));
 	 this.tblCart.Columns.Add(this.column);
 	 this.dsCart.Tables.Add(tblCart);
  }
  public void Add(int pID)
  {
 	 bool isMatch=false;
 	 foreach(DataRow item in this.dsCart.Tables[0].Rows)
 	 {
    if(Convert.ToInt32(item["pid"])==pID)
    {
   	 isMatch=true;
   	 item["quantity"] = (int)item["quantity"]+ 1;
   	 
    }	
 	 }
 	 if(!isMatch)
 	 {
    this.row = this.tblCart.NewRow();
    this.row["pID"] = pID;
    this.row["quantity"] = 1;
    this.tblCart.Rows.Add(row);
 	 }
  }
  public void Remove(int index)
  {
 	 this.dsCart.Tables[0].Rows[index].Delete();
  }

  public void Update(int index,int quantity)
  {
 	 this.dsCart.Tables[0].Rows[index]["quantity"]=quantity;
  }
  public DataTable CartItems
  {
 	 get { return this.dsCart.Tables[0]; }
  }

  public bool HasItem()
  {
 	 if(this.dsCart.Tables[0].Rows.Count>0)
    return true;
 	 return false;
  }



	}
}

من أجل إنشاء الدالة قمنا بعمل ال Method واسمها BuildCart

الإضافة Add

الحذف Remote

التعديل Update

أيضا قمنا بعمل خاصية Property بإسم CartItems تعيد محتويات السلة

طريقة او دالة او method اسمها HasItem تفحص إن كان هناك منتجات أم لا بالسلة .. والتي سنحتاجها لاحقا عند إضافة العناصر للسلة حيث نحتاج لنفحص إن كان هذا اول منتج فننشيء ال Session الخاص بالسلة أم انه هناك عناصر وبالتالي نكتفي فقط بالإضافة لما هو موجود.

بداية أود أن أنوه .. كان يمكنني عمل خاصية تعيد السعر الكل ولكنني حذفتها لسبب تعليمي و هو ان نستخدم الحدث ItemDataBoud لل DataGrid في أداة عرض سلة الشراء .

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

private DataTable tblCart; // جدول سلة الشراء 
  private DataRow row;
  private DataColumn column;
  private DataSet dsCart;

الان عند إنشاء نسخة من الكلاس من المعروف أنه سيتم إستدعاء ال Constructor و هنا كان يحوي الكود التالي :

public ShoppingCart()
  {
 	 this.tblCart=new DataTable("tblCart");
 	 this.dsCart = new DataSet();
 	 this.BuildCart();
  }

نرى أنه قمنا بإنشاء جدول بإسم tblCart و من ثم أنشأنا DataSet و من بعدها قمنا ببناء سلة الشراء عن طريق إستدعاء الدالة BuildCart من نفس الكلاس لذا استخدمنا this

الان بناء سلة الشراء كالتالي :

private void BuildCart()
  {
 	 this.column = new DataColumn("pID",Type.GetType("System.Int32"));
 	 this.tblCart.Columns.Add(this.column);
 	 this.column = new DataColumn("quantity",Type.GetType("System.Int32"));
 	 this.tblCart.Columns.Add(this.column);
 	 this.dsCart.Tables.Add(tblCart);
  }

نرى أننا قمنا بإنشاء أعمدة و إضافتها إلى جدول سلة الشراء الذي أنشأناه سابقا و من ثم قمنا بإضافة الجدول لل DataSet .

الجدول كان يحوي على pID و هو رقم المنتج و quantity وهي كمية المنتج التي تم شرائها و هي ما تلزمنا بداية .

الان نأتي لإضافة العناصر للسلة ..

من المنطق ان نفحص إن كان العنصر موجودا أو لا .. لو ما كان موجود بنضيفو و بنخلي قيمة ال Quantity هي 1 و لو موجود بنزيد على الكمية الموجودة مقدار واحد كما نرى هنا

public void Add(int pID)
  {
 	 bool isMatch=false;
 	 foreach(DataRow item in this.dsCart.Tables[0].Rows)
 	 {
    if(Convert.ToInt32(item["pid"])==pID)
    {
   	 isMatch=true;
   	 item["quantity"] = (int)item["quantity"]+ 1;
   	 
    }	
 	 }
 	 if(!isMatch)
 	 {
    this.row = this.tblCart.NewRow();
    this.row["pID"] = pID;
    this.row["quantity"] = 1;
    this.tblCart.Rows.Add(row);
 	 }
  }

نرى أننا عرفنا متغير Boolean سنستخدمه في البحث .. طبعا أمامنا طريقة البحث في جدول المشتريات أي السجلات التي بداخل الجدول و إن كان العنصر موجود سوف نكتفي بإضافة واحد للكمية أما إن لم يكن موجود فإننا سنقوم بعمل صف داخل الجدول Row و نسند له القيم .. طبعا ما يهمنا هو أن نمرر رقم المنتج عند الإضافة فقط للدالة .. سنضيفه و نجعل الكمية واحد ثم نضيف الصف للجدول ..

أنا هنا أحببت أن نستخدم طرق التعامل مع ال DataTable قدر الإمكان .

ملاحظة فقط على الدالة :

if(Convert.ToInt32(item["pid"])==pID)

نحن مررنا ال product id على شكل int و لكن محتوى السجل من نوع Object وبالتالي كان يجب تحويله بإستخدام Convert لرقم و كان يمكن استخدام Int32.Parse للمعلومة

الان طريقة الحذف Remove

public void Remove(int index)
  {
 	 this.dsCart.Tables[0].Rows[index].Delete();
  }

فقط مررنا الإندكس للمنتج في سلة الشراء وانتبهو ان ال Index يختلف عن ال PK في قاعدة البيانات .. أول عنصر في الداتا جريد و في جدول البيانات يحمل الرقم 0 و ليس 1 كما في قاعدة البيانات لو افترضنا ان لا سجل قد حذف.

دالة التعديل Update

public void Update(int index,int quantity)
  {
 	 this.dsCart.Tables[0].Rows[index]["quantity"]=quantity;
  }

نرى أننا قمنا بالتعديل فقط على كمية المنتج .. واضحة لوحدها

خاصية CartITems التي تعيد محتويات السلة

public DataTable CartItems
  {
 	 get { return this.dsCart.Tables[0]; }
  }

سهلة جدا .. قمنا بإعادة الجدول الاول في ال dataset وهو جدول سلة الشراء

دالة HasITem

public bool HasItem()
  {
 	 if(this.dsCart.Tables[0].Rows.Count>0)
    return true;
 	 return false;
  }

تعيد إما true او false كي نعرف إن كان هناك منتجات في سلة الشراء ..

هكذا نكون انتيهنا من أهم كلاس ..

س. هل هذه أفضل طريقة ؟

بالطبع لا .. يمكننا عمل الكلاس على شكل Collection و نربطه مباشرة مع الأدوات لكننا لن نخرج عن المستوى المبتديء كي نتوه .. ربما لاحقا سأشرح الطريقة .

طبعا اللي عندو سؤال يا ريت يتفضل لان الهدف هو التعلم لا أقل ولا أكثر

تحياتي لكم جميعا

1

You can fly while you can touch the sky

#14

طبعا Session :)

السبب يجب أن تعرفه :

ال Session يحفظ البيانات كحالة مؤقتة تلغى عند إغلاق المتصفح أو انتهاء خاصية ال TimeOut أو إستخدام أحد الدوال التالية Abandon - Remove - RemoveAll

و هذا ما نريده حيث أنه لو اغلق الزبون المتصف فإنه سينهي سلة الشراء معه ..

اما الكوكيز فلن نستخدمها اولا لأنها تحفظ البيانات داخل الجهاز و تبقى كملف نصي لا يمكن إزالته تلقائيا عند اغلاق المتصفح هذا بالإضافة إلا أن له حدود لإستيعاب البيانات و هذا لا يتناسب مع سلة الشراء كما ان طريقة التعامل مع ال cookies ستجلب لنا الصداع حيث سنستقبل البيانات من الملف ثم نحولها ووووووو ..

أما ال Session فكل ما علينا هو عمل Casting ليكون على صيغة سلة الشراء كالتالي:

Cart = (ShoppingCart)Session["myCart"];

شكرا لتفاعلك أخي

You can fly while you can touch the sky

#15

عفوا أستاذ صلاح

هل نستطيع أن نستفيد من الCookies من خلال تخزين البيانات في جهاز العميل حتى إذا أغلق المتصفح لأي سبب ثم رجع الى الموقع يجد بياناته الموجودة في السلة دون الحاجة الى البحث عنها مرة أخرى

وسؤال آخر لوسمحت ما هو الأصح استخدام Session أو إستخدام Cache

#16

بالعادة هناك مفهوم لحفظ البيانات في حال أن الزبون سوف يعود ليشتريها لاحقا سواء لانه انشغل او انه لا يملك الرصيد الكافي و يطلق عليها سلة التمني WishCart و هي تعتمد على تخزين البيانات في قاعدة البيانات ولا نحتاج الكوكيز لانها قابلة للمسح ..

يفضل إستخدام ال Session لا ال Cache في سلة الشراء

You can fly while you can touch the sky

#17

لدي سؤالين لو سمحت في صنف ShoopingCart

1-ما فائدة استخدامنا للDataSet التي سميناها dsCart بينما نحن نتعامل مع جدول واحد فيها وهو tblCart أليس الافضل أن نتعامل مع الجدول مباشرة؟

2-لماذا لا نخزن اسم الصنف بدلا من تخزين الرقم فقط وذلك لتسريع عرض بيانات العربة ؟

طلب بسيط لا تحرمنا من مواضيعك الشيقة :) :)

#18

بخصوص اول نقطة .. على مستوى الكلام يمكن التعامل فقط مع ال DataTable لكن إحتياطا لو احتجنا لجداول اخرى للمساعدة سنحتاج لل DataSet .

ثاني نقطة .. طبعا الأسهل و الصح انك تستخدم ال PK وليس اسم المنتج و مثال للمشكلة لو اننا استخدمنا اسم المنتج فأنه عند التعديل على قاعدة البيانات فأننا سنحتاج لإستخراج ال PK صح؟

بخصوص مشاركاتي أنا الان منشغل جدا و القسم هنا لا يشجع بصراحة .. لذا اكتفي بالرد هنا عند الضرورة :)

بالتوفيق

You can fly while you can touch the sky

#19

كلامك صحيح استاذ محمد

ولكن قصدي ألاثنين معا الPK وProductName وبالنسبة لتغير الاسم فلا أتوقع أن يتغير خلال فتره شراء بسيطة

وعن الدروس فأنا أعلم أن القسم لا يشجع ولكن تأكد أن هنالك الكثير من الاعضاء يحملون المواضيع ويقرونها أوف لاين وأنا منهم والاستفادة حاصلة 100% ولو كان هنالك ويمكنك التأكد من ذلك من خلال عدد القراءات للموضوع

"إعمل العمل وارمه في البحر فإن تجاهله السمك فإن الرب يحفظه"

#20

جزاك الله خيرا خلي علي مشروعك

يا ريت تعمل مشروع بسيط فيه شرح مبسط لكيفية عمل موقع بسيط بال aspnet 2

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

#21

اخ محمد جزاك الله خير على جهودك

ياليت يكون الكود باستخدام VB.net

مع توضيح ، بصراحة حاولت أفهم ولم استطع

اعتذر على إزعاجك مسبقاً لكني بالفعل محتاج لذلك

#22

السلام عليكم

الف شكر استاذ محمد على المجهود الكبير ده لقد استفدت من كثيرا هذا المشروع

بارك الله فيك

#23

شكرا على المجهود الطيب انا لسة مجرتش البرنامج بس واضح ان البرنامج جميل

Post Back Is My Enemy And JavaScript Is my Weapon

#24

شكرا لك اخي

على هذا المشروع

وان شاءالله ان تستمر في وضع دروس مفيده

شكراجزيلا

abdullahf4.jpg
#25

لقد أرفقت قاعدة البيانات على شكل Script فكيف أقوم بصنع وانشائها

اللهم أطل عمري وأحسن عملي واختم بالشهادة أجلي

هذا الموضوع مغلق.

مواضيع مشابهة