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

طريقة ملئ gridview بدون الاعتماد على قاعدة بيانات

بدأه Dev_life في 26 يونيو 2010 · 18 رد · 925 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني الأفاضل

احاول عمل سلة مشتريات

وتمكنت من اكمالها 80% من خلال استعمال table html و session لتخزين مشتريات المستخدم

المشكل يكمن في انني اضفت link لحدف منتج معين من مشترياته فوجدت صعوبة في التعامل مع الأمر

ففكرت في معرفة اسم المنتج وان ابحت عنه في session واحدفه وهكدا اتحكم في الجدر اي session لكن الامر صعب قليلا لاعادة تحديت هده البيانات

ففكرت في استعمال gridview لان هدا الكنترول كما تعلمون سهل التعامل مع البيانات

الا انني لم اتعامل معه مسبقا لتعبئته بالبيانات من دون استعمال قاعدة بيانات

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

فقط ان افهم طريقة التعامل

ما في الأمر هو اني حاولت اضافة columns عن طريق كود vb وليس asp ولم اعرف طريقة اضافة textbox الى خانة معينة والتعامل معها في حالة ادا ما تم تغيير القيمة

حاولت اضافة columns عن طريق الخاصية columns اي طريقة graphic لكن لما احاول اضافة البيانات لا يتمكن من ايجاد

columns

اعتقد انه في طريقة اخرى للتعامل مع هدا الشكل وهي عن طريق dynamic table لكن لم يسبق لي قط ان استعملت هده الطريقة فهل من يعرفها لو سمحتم؟

وف

فجزاكم الله كل خير ووفقكم أجمعين ان تشاركونا بمعلوماتكم

تم تعديل هذه المشاركة بواسطة Dev_life في 26 يونيو 2010 في 01:28

#2

الامر بسيط ان شاء الله ..

بداية قم بعمل class يحتوى على البيانات الاساسية للمنتج .. يعنى مثلا

 public class Product
    {
        public int ID { get; set; }
        public string ProductName { get; set; }
        public decimal Price { get; set; }
    }

بعد ذلك .. يتبقى ان تقوم بملء List من هذه المنتجات ... بناء على اختيار العميل مثلا ..

فيصبح عندك

List<Product>

وقم برفعها على الـ Session >> ومن ثم تقوم بإضافتها كـ DataSource للـ GridView

بالنسبة للحذف .. قم بعمل لينك فى الجريد عن طريق إضافة Column عبارة عن LinkButton مثلا ..

وفى الـ LinkButton1_Click ... قم بإيجاد رقم الصف اللى تم الضغط عليه من قبل المستخدم .. ،،،بيكون ترتيبه هو نفس ترتيب هذا المنتج فى الـ List .. بتقوم بمسحه بـ RemoveAt وتقوم بإعادة تعيين الـ DataSource ورفع الـ List الجديدة على الـ Session

إذا أردت أى توضيح فقط اخبرنى .. ولو بتريد مثال .. ان شاء الله بعمل لك ..

2

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#3

السلام عليكم

ان امكن متال عن ما قلت,حتى لو اني لا استعمل c# بل vb.net

ان امكن طريقة اضافة textbox الى gridview وطريقة التعامل معه في حالة التغيير

جزاك الله خيرا

#4

حسنا اخى الكريم .. سأقوم باعداد مثال لك حالا .. وبـ vb.net ايضا ;)

ان شاء الله

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#5

السلام عليكم

راجع المرفق >> ولو فيه اى استفسار .. فقط اضف هنا :)

WebSite3.rar

3

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#6

ما شاء الله عليك أخي وماذا بعد؟

هدا ما كنت أبحت عنه

جزاك الله خيرا

سأحاول تطبيقه غدا بادن الله

أشكرك مجددا

#7

اخى الكريم ,.,. معك فى اى استفسار ان شاء الله :) واهلا بك

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#8

أخي الكريم

حاولت تطبيق متالك على الموقع الدي انا في طور انشائه

لدي صفحتان صفحة المنتجات وصفحة التي تعرض المنتجات التي اختارها الشخص لكرائها(reservation) الفكرة متلها متل فكرة مواقع التسويق

بحيت ان بصفحة المنتجات لدي datalist أعرض عن طريقه المنتجات

وحين يضغط الشخص على نتج معين فهدا ما أعتمده

    Protected Sub DataProduits_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles DataProduits.ItemCommand
        Try
            Dim Item As DataListItem
            Item = DataProduits.Items(e.Item.ItemIndex)
            Dim ref As Label = Item.FindControl("Ref")
            Dim Design As Label = Item.FindControl("Designation")
            Dim prix As Label = Item.FindControl("Prix")
            Response.Redirect("Reservation.aspx?Ref=" & ref.Text & "&Designation=" & Design.Text & "&Prix=" & prix.Text, False)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

وفي الصفحة التانية التي تعرض ما اختاره الشخص

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            Dim Engin1 As New Engins
            With Engin1
                .Ref = Request.QueryString("Ref").ToString
                .Designation = Request.QueryString("Designation").ToString
                .Prix = Request.QueryString("Prix").ToString
            End With
            Dim EnginChoisi As List(Of Engins) = DirectCast(Session("EnginList"), List(Of Engins))
            EnginChoisi.Add(Engin1)
            Session("EnginList") = EnginChoisi
                      RemplirGrid()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

ويظهر هدا المشكل

ex.Message = "La référence d'objet n'est pas définie à une instance d'un objet."

بهدا السطر

EnginChoisi.Add(Engin1)

ان كان شرحي معقدا فسأرفع لك المشروع

وجزاك الله اخير

#9

هذا طبيعى انه يحصل ...

هذا الخطأ معناه انك لم تقم بتعريف EnginChoisi

وفى السطر

            Dim EnginChoisi As List(Of Engins) = DirectCast(Session("EnginList"), List(Of Engins))

من فين تم رفع هذه الـ List فى الـ SEssion ؟

واقترح للحل .. أن تضيف هذا السطر فى الـ Page_Load

If Not Page.IsPostBack Then
            Dim P_List As New List(Of Engins)
            Session("EnginList") = P_List
          End If

حتى يقوم برفع List فى الـ Session فى اول مرة للصفحة

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#10

اعتقد ان الاصح ان تتم الاضافة الى session في حدث DataProduits_ItemCommand مع التأكد انها ليست فارغة

Dim EnginChoisi As List(Of Engins) 

if Session("EnginList") is nothing then
  EnginChoisi  =new  List(Of Engins)  
else

  EnginChoisi   = DirectCast(Session("EnginList"), List(Of Engins))
end if
' هنا تتم الاضافة وبعد ذلك تنتقل الى صفحة العرض مع استخدام الكود اعلاه ايضا لضمان عدم حدوث خطأ .
#11

أخي وماذا بعد؟

بالنسبة للمتغير EnginChoisi

فلقد قمت بتعريفه

أعتقد انك لم تلحظه بالكود الدي وضعته

سأضيف الكود الدي قلت لي

أخي TareqVB

أعتقد ان المتغير EnginChoisi سيفقد ما يحتويه بمجرد الانتقال الى الصفحة التانية

أليس كدلك؟؟

#12

السلام عليكم

نجح الامر لحد الآن والحمد لله

وهدا بفضلكم وبفضل الأخ وماذا بعد؟

لقد استعملت global.asax وهدا ما أضفت له

    Public Shared PEngins As List(Of Engins)
    Public Shared _Engin As New Engins

وفي كلتا الصفحتين اقوم باستدعاء global asax

المشكل الوحيد المتبقي هو لمادا في كل مرة أعود لصفحة المنتجات لاختار منتج آخر

واضيفه يختفي الاول الدي اضفته كأنني سأضيف لأول مرة منتجا للقائمة

وهدا كود datalist

    Protected Sub DataProduits_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles DataProduits.ItemCommand
        Try
            Dim Item As DataListItem
            Item = DataProduits.Items(e.Item.ItemIndex)
            Dim ref As Label = Item.FindControl("Ref")
            Dim Design As Label = Item.FindControl("Designation")
            Dim prix As Label = Item.FindControl("Prix")
            Session("Ref") &= ref.Text & "|"
            Session("Designation") &= Design.Text & "|"
            Session("Prix") &= prix.Text & "|"
            Session("NombreProduit") = Session("NombreProduit") + 1

            With _Engin
                .Ref = ref.Text
                .Designation = Design.Text
                .Prix = prix.Text
            End With
            PEngins = DirectCast(Session("EnginList"), List(Of Engins))
            PEngins.Add(_Engin)
            Session("EnginList") = PEngins
            Response.Redirect("Reservation.aspx", False)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

وهدا كود بالصفحة التانية التي تعرض المنتجات المختارة

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
             If Not Page.IsPostBack Then
                PEngins = DirectCast(Session("EnginList"), List(Of Engins))
                Session("EnginList") = PEngins

                RemplirGrid()
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

هدا لعرض المنتجات ب gridview

   Sub RemplirGrid()
        Try
            PEngins = DirectCast(Session("EnginList"), List(Of Engins))
            GREngins.DataSource = PEngins
            GREngins.DataBind()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

وهدا للحدف يعمل جيدا

    Sub SuppEngin_Click(ByVal Sender As Object, ByVal e As EventArgs)
        Try
            Dim Row As GridViewRow = DirectCast(DirectCast(Sender, LinkButton).NamingContainer, GridViewRow)
            PEngins = DirectCast(Session("EnginList"), List(Of Engins))
            PEngins.RemoveAt(Row.RowIndex)
            Session("EnginList") = PEngins
            RemplirGrid()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

تم تعديل هذه المشاركة بواسطة Dev_life في 27 يونيو 2010 في 22:17

#13

طيب ايه رأيك لو لم تستخدم الـ global.asax

وتستبدل الكود هذا فى الـ DataProduits_ItemCommand

    Protected Sub DataProduits_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles DataProduits.ItemCommand
        Try
            Dim Item As DataListItem
            Item = DataProduits.Items(e.Item.ItemIndex)
            Dim ref As Label = Item.FindControl("Ref")
            Dim Design As Label = Item.FindControl("Designation")
            Dim prix As Label = Item.FindControl("Prix")
            Session("Ref") &= ref.Text & "|"
            Session("Designation") &= Design.Text & "|"
            Session("Prix") &= prix.Text & "|"
            Session("NombreProduit") = Session("NombreProduit") + 1

            With _Engin
                .Ref = ref.Text
                .Designation = Design.Text
                .Prix = prix.Text
            End With
			Dim PEngins as new List(Of Engins)
			IF NOT Session("EnginList") Is Nothing THEN
				PEngins = DirectCast(Session("EnginList"), List(Of Engins))
			ELSE
				Session("EnginList") = PEngins
			END IF
            PEngins.Add(_Engin)
            Session("EnginList") = PEngins
            Response.Redirect("Reservation.aspx", False)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

وكود صفحة العرض

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
             If Not Page.IsPostBack Then
                Dim PEngins AS New List(Of Engins)
				If Session("EnginList") Is Nothing THEN
					Session("EnginList") = PEngins
				END IF
				PEngins = DirectCast(Session("EnginList"), List(Of Engins))
                RemplirGrid()
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

جرب وعرفنى النتيجة

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#14

أخي الكريم

نفس الشيء

لايحتفظ بالمنتجات التي سبق وتم اختيارها

#15

هل من الممكن ارفاق الصفحتين الخاصتين بالعرض والرفع .. ؟؟ :)

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#16

طبعا

لحظة لو سمحت

#17

تفضل أخي

وأعتدر عن تكليفك معي

جزاك الله كل خير

Location.rar

#18

تم الحل الحمد لله .. فقط استبدل Page_Load لصفحة الـ Produits لتكون كالتالى

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        conn = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
        Dim NombreEngins As Integer
        Try
            If Not Page.IsPostBack Then
                SQL(0) = "SELECT NOM_CATEGORIE,CategorieID FROM CATEGORIES"
                If conn.State <> ConnectionState.Open Then
                    conn.Open()
                End If
                SQLCMD = New SqlCommand(SQL(0), conn)
                SQLDTA = New SqlDataAdapter(SQLCMD)
                SQLDTA.Fill(DTS, "Categories")
                If DTS.Tables("Categories").Rows.Count <> 0 Then
                    For i As Integer = 0 To DTS.Tables("Categories").Rows.Count - 1
                        SQL(3) = "SELECT COUNT(*) FROM ENGINS WHERE CategorieID=" & DTS.Tables("Categories").Rows(i).Item(1)
                        SQLCMD = New SqlCommand(SQL(3), conn)
                        NombreEngins = SQLCMD.ExecuteScalar
                        trCategories.Nodes.Add(New TreeNode(DTS.Tables("Categories").Rows(i).Item(0).ToString _
                        & " (" & NombreEngins & ")"))
                    Next
                End If
                Dim Pengins As New List(Of Engins)
               If Session("EnginList") Is Nothing Then
                    Session("EnginList") = Pengins
                End If
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

والسبب انك فى كل مرة بتعيد تعريف الـ Session بـ List فارغة

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#19

السلام عليكم

أخي وماذا بعد؟

مادا عساي أقول

لقد كنت خير عون

جزاك الله خيرا وتبت الله خطاك

فعلا تم حل المشكل

شكرا جزيـــلا لك

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…