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

طلب عدم تكرار قيمة في الDataGrid أثناء العرض على الشاشة

بدأه أبو سيف المصلاوي في 1 مايو 2010 · 9 رد · 1,253 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

سؤال إلى الإخوة المبرمجين الأفاضل

لدي فورم فيه داتاكريد وفي الأعلى MaskedTextBox يتم من خلاله إدخال رقم والبحث عن هذا الرقم داخل قاعدة البيانات عن طريق جملة استعلام SQL ثم إذا وجد ما يطابق الاستعلام يقوم بإضافة السجل المطلوب إلى الـDataGrid وإلا فيظهر رسالة خطأ أو أنه لا يضيف السجل أصلا.

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

السؤال هو :

كيف أستطيع منع تكرار إظهار (إضافة) معلومات الرقم المستعلم عنه إلى الـDataGrid المعروضة أمامي حتى لا أؤشر الرقم مرتين ويحدث إشكال ؟ يعني مثلا : لو قمت بإدخال القيمة (07507403333) وضغطت زر (إضافة) يضيف معلومات الرقم إن لم يكن مؤشرا إلى الداتاكريد وفي حالة أني أدخلت الرقم مرة أخرى يظهر المفروض أن يظهر لي رسالة بأن الرقم قد تم البحث عنه سابقا وهو معروض أمامي الآن (لأنني الآن إن بحثت عن رقم ووجده يظهر لي معلوماته المطلوبة وإذا ادخلته مرة أخرى يظهر معلوماته مرة أخرى وهذا خطأ) ... كيف يتم هذا جزاكم الله خيرا لأن برنامجي الآن متوقف على هذه الحالة التي لم أجد لها حلا وبارك الله فيكم ورزقكم الجنة.

أخوكم

#2

لماذا لا تبحث عن الرقم فبل اضافته؟ فاذا وجدنه اعطي رسالة خطا. اذا لم تجده اضيفه؟

#3

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

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

#4

يمكنك ذلك بهذه الطريقة

' Get the Databale from Bindingresource used in the datagridview
Dim dt = mydataset.Tables(BindingSource1.DataMember)

Dim dv As New DataView(dt)
' Change the id to the field you want to search
 Dim _RowFilter As String = "convert(id, 'System.String') like '" & Me.TextBox1.Text & "%'"
        dv.RowFilter = _RowFilter
        If dv.Count >=1 then
            MsgBox("Item Exist")
        End If
#5

أخي العزيز أستاذ سمير أعزك الله

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

أنتظر ردك بفارغ الصبر أخي العزيز.

الكود :

Private Sub Add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Add.Click

'DataSet2.Clear()

SQLstr1 = "SELECT SimNo , DealerName , ConStatus FROM Sims WHERE SimNo = '" & Val(SimNo.Text) & "' and ConStatus = 0"

Conn.Open()

Dim DataAdapter2 As New OleDbDataAdapter(SQLstr1, Conn)

DataAdapter2.Fill(DataSet2, "Sims")

Conn.Close()

DataGridView1.DataSource = DataSet2

DataGridView1.DataMember = "Sims"

Dim BindingSource1 As New BindingSource

BindingSource1.DataSource = "Sims"

Dim DT = DataSet2.Tables(BindingSource1.DataMember)

Dim DV As New DataView(DT)

' Change the id to the field you want to search

Dim _RowFilter As String = "convert(SimNo, 'System.String') like '" & SimNo.Text & "%'"

DV.RowFilter = _RowFilter

If DV.Count >= 1 Then

MsgBox("Item Exist")

End If

SimNo.Clear()

End Sub

#6

ان ما قمت به صحيح تماما ما عدا هذا السطر غيره الى

SimNo = '" & Val(SimNo.Text) & "' and ConStatus = 0"

الى

SimNo = Val(SimNo.Text)

جرب ورد خبر.

تم تعديل هذه المشاركة بواسطة سمير ابراهيم في 5 مايو 2010 في 10:18

#7

أخي واستاذي العزيز استاذ سمير

حياك الله وبياك

بالنسبة للقيمة ConStatus لا أظن أن لها تأثير لأنها عبارة عن CheckBox في قاعدة البيانات وعند مطابقة الشرط المطلوب وإظهار القيمة على الداتاكريد يظهر الـCheckBox كعمود يتم تأشيره ثم حفظ البيانات . فعندما أريد ConStatus=0 أي اريد العقود غير المؤشرة. علما أنني لست الآن في البيت وقاعدة البيانات ليست أمامي إذ أنني في العمل الآن وسوف أعود بعد ثلاث ساعات تقريبا.

أخي واستاذي العزيز

لا أريد أن أثقل عليك بالأسئلة ولكن لدي سؤال آخر حول الداتاكريد وهو :

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

آآمل أن أجد الإجابة الشافية الكافية الوافية لديك وبارك الله فيك وجعلها في ميزان حسناتك وأشكر تفاعلك المتزامن معي.

#8
اقتباس
بالنسبة للقيمة ConStatus لا أظن أن لها تأثير

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

هل جربت ما اعطيتك اياه؟

اثقل ولا يهمك (لا تصدق عم امزح) :)

احيانا انشغل جدا ولا اجد الوقت لاجاوب.

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

فالنفرض انك تريد السماح للعامود الثاني

Dim ColumnAllowRead As Integer = 2
       For Each x as DataGridViewColumn In Me.DataGridView1.Columns
            If x.Index <> ColumnAllowread - 1 then
                x.ReadOnly = True
            end if
       Next

مع التحية

تم تعديل هذه المشاركة بواسطة سمير ابراهيم في 6 مايو 2010 في 23:21

#9

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

جاري التجربة أخي العزيز

#10

أخي العزيز الأستاذ سمير

تحية عطرة وطيبة

آسف لتأخري عليك في الرد

بعد التجربة بالنسبة لكود تحرير عمود وتجميد البقية بدون تحرير فقد نجحت الفكرة وجزاك الله خير.

أما بالنسبة للمشكلة الأولى فلحد الآن لم تحل ولا أدري ما هو السبب

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

أخوكم

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

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

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

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

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