تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة فى تحديث حقل اداة DataGridView
#1
السلام عليكم

واجهت مشكلة غريبة بعض الشئ مش عارف انا كاتب الكود غلط ولا منين المشكلة

سمى الله اولا

المشروع تبعى نسخة طبق الاصل من هذه الصورة

ولكن مع تغير الاسامى فقط




مشكلة المشروع هى

المفروض انى اكتب الكمية المراد بيعها ثم اضغط على زر بيع

وبعد ضغط زر بيع

يتم الاتى

زيادة الكمية الى اتباعت على الكمية المباعة
نقص الكمية الى اتباعت من الكمية المتبقية

حاولت بالطريقة العادية الى دايما بستخدمها

soldcount += tosale
remain -= tosale

ولكن لم تنفع ولا اعرف السبب

وهذا رابط تحميل المشروع للتعديل عليه

http://up.dev-point.com/download264781.html

وهذا الكود كامل الخاص بزر البيع

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

Private Sub d_CellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles d.CellClick
If e.ColumnIndex = 8 Then
cmdb = New OleDb.OleDbCommandBuilder(da)
Dim founded As String = d.Rows(e.RowIndex).Cells("founded").Value '"الكمية الموجودة"
Dim soldcount As String = d.Rows(e.RowIndex).Cells("soldcount").Value '"الكمية المباعة"
Dim remain As String = d.Rows(e.RowIndex).Cells("remain").Value '"الكمية المتبقية"
Dim tosale As String = d.Rows(e.RowIndex).Cells("tosold").Value '"الكمية المطلوب بيعها"
Dim price As Integer = d.Rows(e.RowIndex).Cells("price").Value '"السعر"
If IsNothing(tosale) Then MsgBox("يجب كتابة قيمة في الكمية المراد بيعها قبل النقر هنا", MsgBoxStyle.Critical, "") : Exit Sub
founded += tosale
dt.Rows(e.RowIndex).Item("founded") = founded
soldcount += tosale
remain -= tosale
dt.Rows(e.RowIndex).Item("soldcount") = soldcount
dt.Rows(e.RowIndex).Item("remain") = remain
Dim pricesale As String = "اجمالى السعر = " & tosale * price
MsgBox("العدد = " & tosale & nl & "سعر القطعة = " & price & nl & pricesale)
da.Update(dt)
Form1_Load(Nothing, Nothing)
End If
End Sub
الرد }}}
تم الشكر بواسطة:
#2
حاول تستخدم Integer.Parse مع totalSale و تحولها لرقم و نفس الشي مع founded و بعد كده تقدر ترجعهم إلي  String  بسهولة
الرد }}}
#3
(09-04-16, 04:35 AM)silverlight كتب : حاول تستخدم Integer.Parse مع totalSale و تحولها لرقم و نفس الشي مع founded و بعد كده تقدر ترجعهم إلي  String  بسهولة

ممكن الطريقة يا غالى

لانى اول مرة اتعامل مع القواعد
الرد }}}
تم الشكر بواسطة:
#4
PHP كود :
   Private Function ParseInteger(stringToParse As String) As Integer
        Return ParseInteger
(stringToParseFalse)
 
   End Function

 
   Private Function ParseInteger(stringToParse As StringthrowException As Boolean) As Integer
        Dim result 
As Integer 0
        If throwException Then
            result 
Integer.Parse(stringToParseGlobalization.NumberStyles.AnyGlobalization.CultureInfo.InvariantCulture)
 
       Else
            If Not Integer
.TryParse(stringToParseGlobalization.NumberStyles.AnyGlobalization.CultureInfo.InvariantCultureresultThen
                Integer
.TryParse(stringToParseGlobalization.NumberStyles.AnyGlobalization.CultureInfo.CurrentCultureresult)
 
           End If
 
       End If

 
       Return result
    End 
Function 

اعمل مثال صغير لنفسك و الموضوع سوف يتضح لك فقط عليك ان تمرر قيمة String الذي هو في الاصل علي هيئة رقم الي الدالة الأولي
الرد }}}
تم الشكر بواسطة: الماجيك مسعد , hassan , hassan , Amir_Alzubidy
#5
جربت يا غالى

ولم تنفع او انى استخدمتها غلط

استخدمتها كدا

dt.Rows(e.RowIndex).Item("soldcount") = ParseInteger(soldcount)

شكرا لكم جميعا

وجدت الحل باستخدم هذا الكود

Dim x As Integer = Val(soldcount) + Val(tosale)
dt.Rows(e.RowIndex).Item("soldcount") = x

ولكن كنت اتمنى ان اعرف ما هو سبب الخطأ فى الكود القديم
الرد }}}
تم الشكر بواسطة:
#6
هذا مثال صغير لتوضيح الفكرة

PHP كود :
Dim totalValue As String "20"
 
       Dim founded As String "10"

 
       Dim total As Integer ParseInteger(totalValue)
 
       Dim foundedValue As Integer ParseInteger(founded)

 
       total += foundedValue
        Label1
.Text total 


في حالتك هنا أنت تستخدم المدخلات بشكل مباشر من الداتجريدفيو والمدخلات هنا في الداتجريد فيو يتم معاملتاه علي انها Object
حاول تمرر المدخلات علي هيئة  Tostring
الرد }}}
تم الشكر بواسطة: الماجيك مسعد , hassan
#7
تمام يا غالى شكرا لك على توضيح سبب المشكلة
الرد }}}
تم الشكر بواسطة:
#8
(09-04-16, 08:58 AM)khodor1985 كتب : عذرا أخي لدي اعتراض على الطريقة أو الأسلوب، لماذا تنتهجون الطرق الطويلة في التفكير؟ لماذا تصعبون الأمور؟
لنفترض أن لديك 1000 صنف في الجدول كيف ستنفذ عملية البيع؟

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


المرجو المساعدة بفكرة افضل.
الرد }}}
تم الشكر بواسطة: الماجيك مسعد , hassan
#9
الأخ الفاضل khodor

مع علاقة موضوع السؤال ب تساؤلك عن كيفية قراءة بيانات كثيرة لأني لست متابعا للأمر من بدايته
الرد }}}
تم الشكر بواسطة: الماجيك مسعد , hassan
#10
(09-04-16, 08:58 AM)khodor1985 كتب : عذرا أخي لدي اعتراض على الطريقة أو الأسلوب، لماذا تنتهجون الطرق الطويلة في التفكير؟ لماذا تصعبون الأمور؟
لنفترض أن لديك 1000 صنف في الجدول كيف ستنفذ عملية البيع؟

مرحبا اخى

الا اشكرك جدا على طرحك للافكار

لانى بالفعل طلبت طرح افكار اكتر

فى هذا الموضوع

http://vb4arb.com/vb/thread-15384-page-2.html

عن مثل هذه البرامج

وبالنسبة لهذا السؤال
لنفترض أن لديك 1000 صنف في الجدول كيف ستنفذ عملية البيع؟

لم افهم ما تقصده جيدا

على حد فهمى لو سؤالك دا معناه كيف هبيع كمية من الصنف

فالاخ سعود بارك الله فيه

ضايف خاصية جميلة جدا
وهى الكمية المراد بيعها
حيث اكتب فيها الكمية الى عايز ابعها
مثلا لو هبيع 1000 قطعة من صنف واحد

هكتب 1000 فى حقل الكمية المراد بيعها واضغط زر بيع

وانا عدلته قليلا بان ييظهر رسالة بعد ضغط بيع
يظهر فيها العدد المراد بيعه + سعر القطعة الواحدة +السعر الاجمالى لكل القطع المراد بيعها

لكن لو حضرتك تقصد شئ اخر بسؤالك يريت توضحلى اكتر

واتمنى ان تمدنا بالافكار هذا شئ يفرحنى جدا والله

(09-04-16, 01:15 PM)khodor1985 كتب : السلام عليكم أخي العزيز ورحمة الله وبركاته
لقد قمنا بالتعديل على مشروعكم من وجهة نظرنا ونحن بالتأكيد نحترم وجهة نظر الآخرين ونضعها على رأسنا ولكن التنوع والإختلاف في تقديم الأفكار والآراء يغني المشاركة  ويثريها.

وأرجو من الله عز وجل أن أكون قد أصبت إنه سميع مجيب.

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


إدخال صنف جديد :
نضغط أولا على زر جديد في حال كانت مربعات النوصوص معبئة ثم نقوم بتحرير البيانات داخل مربعات النصوص، وبعد أن ننتهي نضغط على الزر حفظ لإدخال البيانات إلى قاعدة البيانات :






إذا اردنا تنفيذ عملية بيع أنظر جيد ما الذي سيجري :








الأكواد :
قم بالإعلان عن المتغيرات التالية :
PHP كود :
Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\db.accdb")
 
   Dim cmd As OleDbCommand
    Dim cmb 
As OleDbCommandBuilder
    Dim da 
As OleDbDataAdapter
    Dim ds 
As DataSet
    Dim bs 
As BindingSource
    Dim sqlstr 
As String 

تحميل البيانات من قاعدة البيانات وإظهارها في مربعات النصوص والداتا غريد للمستخدم النهائي وطبعا سوف نستدعي هذا الاجراء في الحدث Load للنموذج :
PHP كود :
Private Sub LoaddgvInventory()
 
       Try

            con
.Open()
 
           sqlstr "Select ItmID as الرقم,ItmName as الصنف,ItmPrice as السعر,ItmIN as الوارد,ItmTotal as الإجمالي,ItmOut as الصادر, " _
                
"ItmRemain as المتبقي From tblInventory Where ItmActv=1"
 
           cmd = New OleDbCommand(sqlstrcon)
 
           da = New OleDbDataAdapter(cmd)
 
           ds = New DataSet
            ds
.Clear()
 
           da.Fill(ds"tblInventory")

 
           bs = New BindingSource
            bs
.DataSource ds.Tables("tblInventory")


 
           ClearDataBinding()

 
           txtID.DataBindings.Add("text"bs"الرقم"22)
 
           txtItem.DataBindings.Add("text"bs"الصنف"22)
 
           txtPrice.DataBindings.Add("text"bs"السعر"22)
 
           txtIN.DataBindings.Add("text"bs"الوارد"22)
 
           txtTotal.DataBindings.Add("text"bs"الإجمالي"22)
 
           txtOut.DataBindings.Add("text"bs"الصادر"22)
 
           txtRemain.DataBindings.Add("text"bs"المتبقي"22)


 
           dgvInventory.DataSource bs
            CalTotal
()

 
           con.Close()
 
       Catch ex As Exception
            If con
.State ConnectionState.Open Then con.Close()
 
           MsgBox(ex.Message)
 
       End Try

 
   End Sub 

زر جديد :
PHP كود :
 ClearDataBinding()
 
       txtID.Clear()
 
       txtItem.Clear()
 
       txtPrice.Clear()
 
       txtIN.Clear()
 
       txtTotal.Text 0
        txtOut
.Text 0
        txtRemain
.Text 0
        txtToOut
.Text 0

        Dim Max 
As Integer
        Max 
ds.Tables("tblInventory").Rows.Count
        txtID
.Text += CStr(Max 1

زر الحفظ أو البيع :
PHP كود :
Private Sub SaveRecord()
 
       Try
            con
.Open()
 
           sqlstr "Select * From tblInventory Where ItmID=@ItmID"
 
           cmd = New OleDbCommand(sqlstrcon)
 
           cmd.Parameters.Add("@ItmID"OleDbType.Integer).Value IIf(txtID.Text.Trim.Length 0System.DBNull.ValuetxtID.Text)

 
           If cmd.ExecuteScalar 0 Then
                sqlstr 
"Update tblInventory Set ItmName=@ItmName,ItmPrice=@ItmPrice,ItmIN=@ItmIN,ItmTotal=@ItmTotal,ItmOut=@ItmOut, " _
                         
"ItmRemain=@ItmRemain Where ItmID=@ItmID"
 
               cmd = New OleDbCommand(sqlstrcon)
 
               Dim Total As Integer Val(txtOut.Text) + Val(txtToOut.Text)
 
               With cmd.Parameters
                    
.Add("@ItmName"OleDbType.VarWChar).Value IIf(txtItem.Text.Trim.Length 0System.DBNull.ValuetxtItem.Text)
 
                   .Add("@ItmPrice"OleDbType.Integer).Value IIf(txtPrice.Text.Trim.Length 0System.DBNull.ValuetxtPrice.Text)
 
                   .Add("@ItmIN"OleDbType.Integer).Value IIf(txtIN.Text.Trim.Length 0System.DBNull.ValuetxtIN.Text)
 
                   .Add("@ItmTotal"OleDbType.Integer).Value IIf(txtTotal.Text.Trim.Length 0System.DBNull.ValuetxtTotal.Text)
 
                   .Add("@ItmOut"OleDbType.Integer).Value IIf(Len(Total) = 0System.DBNull.ValueTotal)
 
                   .Add("@ItmRemain"OleDbType.Integer).Value IIf(txtRemain.Text.Trim.Length 0System.DBNull.ValuetxtRemain.Text)
 
                   .Add("@ItmID"OleDbType.Integer).Value IIf(txtID.Text.Trim.Length 0System.DBNull.ValuetxtID.Text)
 
               End With
                cmd
.ExecuteNonQuery()
 
               MsgBox("تمت عملية التحديث بنجاح"MsgBoxStyle.MsgBoxRight MsgBoxStyle.Information"إنتباه")
 
           Else
                sqlstr 
"INSERT INTO tblInventory(ItmName,ItmPrice,ItmIN,ItmTotal,ItmOut,ItmRemain) " _
                    
"Values(@ItmName,@ItmPrice,@ItmIN,@ItmTotal,@ItmOut,@ItmRemain)"

 
               cmd = New OleDbCommand(sqlstrcon)

 
               With cmd.Parameters
                    
.Add("@ItmName"OleDbType.VarWChar).Value IIf(txtItem.Text.Trim.Length 0System.DBNull.ValuetxtItem.Text)
 
                   .Add("@ItmPrice"OleDbType.Integer).Value IIf(txtPrice.Text.Trim.Length 0System.DBNull.ValuetxtPrice.Text)
 
                   .Add("@ItmIN"OleDbType.Integer).Value IIf(txtIN.Text.Trim.Length 0System.DBNull.ValuetxtIN.Text)
 
                   .Add("@ItmTotal"OleDbType.Integer).Value IIf(txtTotal.Text.Trim.Length 0System.DBNull.ValuetxtTotal.Text)
 
                   .Add("@ItmOut"OleDbType.Integer).Value IIf(txtToOut.Text.Trim.Length 0System.DBNull.ValuetxtToOut.Text)
 
                   .Add("@ItmRemain"OleDbType.Integer).Value IIf(txtRemain.Text.Trim.Length 0System.DBNull.ValuetxtRemain.Text)

 
                   cmd.ExecuteNonQuery()
 
                   MsgBox("تمت عملية الإضافة بنجاح"MsgBoxStyle.MsgBoxRight MsgBoxStyle.Information"إنتباه")

 
               End With
            End 
If

 
           con.Close()
 
           LoaddgvInventory()
 
       Catch ex As Exception
            If con
.State ConnectionState.Open Then con.Close()
 
           MsgBox(ex.Message)
 
       End Try 

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

المشروع بعد التعديل :

أتمنى لك التوفيق

السلام عليكم

اولا تسلم ايدك جدا يا استاذى الفاضل khodor1985

بالفعل انا حاولت التعديل لمايناسبنى وما هو افضل للمشروع

هذا تعديلى من امس كما فى الصور






وعجبنى طريقة تفكيرك جدا

وسوف احمل مشروعك

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

ساعود بعد قراءة وفهم الاكواد جيدا

اخى لدى استفسار بسيط

بالنسبة لحقل الصادر = الكمية المباعة

طيب الوارد = ايه؟؟؟؟؟؟
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم