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

سؤال فى منع التكرار بواسطه Datagrid

بدأه shosho842000 في 12 نوفمبر 2009 · 6 رد · 3,014 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيف يمكن لى منع التكرار الرقم بواسطه datagrid

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

 If DataGridView1.Item(e.ColumnIndex, e.RowIndex).EditedFormattedValue <> Nothing Then
			' الحصول على المعلومة التي تمت كتابتها للتو على الخلية الحالية
			Dim v As Integer = DataGridView1.Item(0, e.RowIndex).EditedFormattedValue
			' استعراض جميع اسطر الداتاجريد فيو
			For Each row As DataGridViewRow In DataGridView1.Rows
				' تجاهل السطر الجديد الأخير
				If Not row.IsNewRow And Not row.Cells(e.ColumnIndex).Selected Then
					' لا يمكننا مقارنة قيمة بفراغ
					If row.Cells(1).Value <> Nothing Then
						' مقارنة القيمة الجديدة بالقيم الأخرى
						If row.Cells(1).Value = v Then
							' إعلام المستخدم أن المعلومة مكررة و طلب كتابة واحدة أخرى
							MsgBox("المعلومة التي تم إدخالها مكررة, المرجو تحديد واحدة أخرى...")
							' البقاء على نفس الخلية
							e.Cancel = True
							Return
						End If
					End If
				End If
			Next
		End If

يظهر لى فى form _load رساله خطا

وهذا هو البرنامج مع قاعده البيانات

وشكرا

WindowsApplication4.rar

1.txt

3.txt

#2

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

أنظري معي هذا السطر من الكود :

Dim v As Integer = DataGridView1.Item(0, e.RowIndex).EditedFormattedValue

أولا, قومي بتغيير نوع المتغير v من Integer إلى نوع البيانات في العمود المراد منع التكرار فيه.

ثانيا, قومي بتحديد الرقم 0 إلى رقم العمود المراد منع التكرار فيه.

ملاحظة : كان الأجدر لو طرحتي سؤالك في موضوع سابق لك في نفس القسم به تقريبا نفس السؤال (سؤال حول منع التكرار اثناء التعديل). تعدد المواضيع بنفس الأسئلة يزيد من صعوبة البحث بالنسبة للأعضاء.

#3

هذا الذى قمت بعمله فى المشروع المرفق لو نظرت اليه

حيث ان نوع البيانات المراد تغيرها هى من نوع integer ورقم السطر المراد منع التكرار فيه هو اول حقل من الحقول حيث يحمل الرقم 0

#4

جربي هذا الكود :

		If DataGridView1.Item(e.ColumnIndex, e.RowIndex).EditedFormattedValue <> Nothing Then
			' الحصول على المعلومة التي تمت كتابتها للتو على الخلية الحالية
			Dim v As Integer = DataGridView1.Item(0, e.RowIndex).EditedFormattedValue
			' استعراض جميع اسطر الداتاجريد فيو
			For Each row As DataGridViewRow In DataGridView1.Rows
				' تجاهل السطر الجديد الأخير
				If Not row.IsNewRow And Not row.Cells(e.ColumnIndex).Selected Then
					' منع البحث في نفس الخلية على نفس السطر
					If row.Cells(e.ColumnIndex).RowIndex <> e.RowIndex Then
						' لا يمكننا مقارنة قيمة بفراغ
						If row.Cells(0).Value <> Nothing Then
							' مقارنة القيمة الجديدة بالقيم الأخرى
							If row.Cells(0).Value = v Then
								' إعلام المستخدم أن المعلومة مكررة و طلب كتابة واحدة أخرى
								MsgBox("المعلومة التي تم إدخالها مكررة, المرجو تحديد واحدة أخرى...")
								' البقاء على نفس الخلية
								e.Cancel = True
								Return
							End If
						End If
					End If
				End If
			Next
		End If
#5

الف شكر على تعبك معايا كدا اتضبطت

شكراااااااااااااااااااااااااااا

#6

لو سمحت أستاذي محمد تكمل جميلك وتعلمني كيف أعمل لو أردت منع التكرار مع مراعاة التشكيل ( أعني : أحمد = احمد )

هذا الكود الذي استخدمه للتشكيل

        For Each Nass As String In TextBox1.Text
            Nass = Regex.Replace(Nass, "[هة]", "[هة]")
            Nass = Regex.Replace(Nass, "[أإآا]", "[أإآا]")
            Nass = Regex.Replace(Nass, "[ىي]", "[ىي]")
                Nass &= "[ًٌٍَُِّْ]*"
                Txt &= Nass
        Next

تم تعديل هذه المشاركة بواسطة رحيّم في 30 مايو 2012 في 22:55

#7

شكراً لقد توصلت إلى الطريقة التالية ومشى الحال ولكن علامات التشكيل لم تنضبط

Try
            If DataGridView1.Item(e.ColumnIndex, e.RowIndex).EditedFormattedValue <> Nothing Then
                ' الحصول على المعلومة التي تمت كتابتها للتو على الخلية الحالية
                Dim v As String = DataGridView1.Item(1, e.RowIndex).EditedFormattedValue

                If BindingSource1.Count = 0 Then Beep() : Exit Sub

                If v = Nothing Then
                    MsgBox("أدخل الإسم")
                    Exit Sub
                End If
                Dim Txt As String = ""
                For Each Nass As String In v
                    Nass = Regex.Replace(Nass, "[هة]", "[هة]")
                    Nass = Regex.Replace(Nass, "[أإآا]", "[أإآا]")
                    Nass = Regex.Replace(Nass, "[ىي]", "[ىي]")
                    Nass &= "[ًٌٍَُِّْ]*"
                    Txt &= Nass
                Next
                Dim D As New DataSet
                D.Tables.Add("T1")
                D.Tables("T1").Columns.Add("id2")
                D.Tables("T1").Columns.Add("name")
                Dim Row As DataRow
                con.Open()
                For Each row1 As DataGridViewRow In DataGridView1.Rows
                    ' تجاهل السطر الجديد الأخير
                    If Not row1.IsNewRow And Not row1.Cells(e.ColumnIndex).Selected Then
                        ' منع البحث في نفس الخلية على نفس السطر
                        If row1.Cells(e.ColumnIndex).RowIndex <> e.RowIndex Then

                            T = Regex.Matches(row1.Cells(1).Value.ToString.Trim, "^" & Txt.Trim & "$")
                            TextBox4.Text = Txt
                            If T.Count <> 0 Then
                                Row = D.Tables("T1").NewRow
                                Row.Item("id2") = row1.Cells(0)
                                Row.Item("name") = row1.Cells(1)
                                D.Tables("T1").Rows.Add(Row)
                            End If
                        End If
                    End If
                    con.Close()
                Next
                'End If

                con.Close()
                If D.Tables("T1").Rows.Count = 0 Then
                    con.Close()
                    Exit Sub
                Else
                                MsgBox("الإسم مكرر")
                    BindingSource1.CancelEdit()
                    con.Close()
                    e.Cancel = True
                    Exit Sub
                End If
                con.Close()

            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try

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