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

كيفية ترقيم ال Rowheader فى ال Datagridview

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

كيفية ترقي ال RowHeader فى ال DataGridView

بعد التحية

أقدم لكم طريقة لترقيم ال RowHeader فى ال DataGridView

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

داخل ال RowHeader وفى هذه الطريقة يجب ان تحدد مكان الرسم بأستخدام X,Y حتى تضع الرقم المرسوم فوق ال RowHeader

ومن وجهة نظرى الشخصية لم تعجبنى هذه الطريقة وكانت كالتالى

فى الحدث RowPostpaint لل DataGridView

Private Sub dataGridView1_RowPostPaint(ByVal sender As Object, _
	ByVal e As DataGridViewRowPostPaintEventArgs) _
	Handles dataGridView1.RowPostPaint
		' Paint the row number on the row header.
		' The using statement automatically disposes the brush.
		Using b As SolidBrush = New SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor)

			e.Graphics.DrawString(e.RowIndex.ToString(System.Globalization.CultureInfo.CurrentUICulture), _
								  dataGridView1.DefaultCellStyle.Font, _
								  b, _
								  e.RowBounds.Location.X + 20, _
								  e.RowBounds.Location.Y + 4)

		End Using
	End Sub

ولكنى أستخدمت طريقة أفضل من وجهة نظرى لترقيم ال RowHeader وهى كالتالى

اولاُ نقوم بأنشاء روتين للترقيم كالتالى

Sub GiveNumber()
		For i As Integer = 0 To Dgrd.Rows.Count - 1

			If Dgrd.Rows.Count > 1 Then
				Dgrd.Rows(i).HeaderCell.Value = i.ToString

			End If
		Next
	End Sub

ويتم أستدعاؤه من كلً من الحدثين RowsAdded و RowsRemoved كما فى الكود التالى

Private Sub Dgrd_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles Dgrd.RowsAdded
		GiveNumber()
	End Sub

	Private Sub Dgrd_RowsRemoved(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsRemovedEventArgs) Handles Dgrd.RowsRemoved
		GiveNumber()
	End Sub

الحدث الأول RowsAdded عند ملئ ال DataGridView بالقيم يتم تنفيذ هذا الحدث وبالتالى يستدعى روتين الترقيم

اما فى الحدث الآخر فعندما يقوم المستخدم بحذف سطر من ال DataGridView يتم أستدعاؤه لتحديث الترقيم بعد الحذف

وأضفت روتين آخر لألغاء الترقيم أذا أراد أحد ألغاء الترقيم وهو لا يختلف عن الروتين الأول كل ما عليه ان يضع بدلاً من الأرقام مسافات خالية كالتالى

Sub RemoveNumber()
		For i As Integer = 0 To Dgrd.Rows.Count - 1

			If Dgrd.Rows.Count > 1 Then
				Dgrd.Rows(i).HeaderCell.Value = ""

			End If
		Next
	End Sub

ويمكن أستدعاء هذا الروتين من مفتاح تقوم بأنشائه على الفورمه لألغاء الترقيم

على العموم فى المثال كل ما ذكرت وأيضاً بالمثال طريقة أخفاء ال RowHeader وأظهاره

دعواتى لكم بالتوفيق وأسألكم الدعاء.............

DataGridView.rar

كل من فى الوجود يطلب صيداً :::: غير ان الشباك مختلفات

#2

تسلم أخي njd على الكود الرائع

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

حيث أن الاختلاف في أنني أريد الترقيم يكون في عمود من أعمدة الداتا جريد

وحاولت ذلك بعد قرائه الكود تبعك بس للأسف أنا خبرتي في الدات جريد ضعيفه جدااا

فأرجو منك أن لو توضح كيف أعمل الترقيم في العمود sn الخاص بالتسلسل

وأنا عامل داتا جريد خاصة بادخال بيانات الفاتورة

وهي تحتوي على التالي

العمود الاول الخاص بالترقيم كما ذكرت في الاول

العمود الثاني خاص باسم الصنف ...............يأخذ قيمتة من تكست بوكس أومن قاعدة البيانات في حاله استخدام الاسكانر

العمود الثالث خاص بسعر الصنف ..............يأخذ قيمته من تكست بوكس أومن قاعدة البيانات في حاله استخدام الاسكانر

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

العمود الخامس خاص بإجمالي السعر....... السعر * الكمية

المشاكل:

1- الترقيم المتسلسل للصفوف في العمود sn

2-نتقل القيم من التكست بوكس أو قاعدة البيانات لتدخل في الخلايا الخاصة بها في الداتا جريد (يعني تحديد الخلية المطلوبة لاستقبال البيانات)

3- أين أكتب عملية الضرب الخاصة بالاجمالي يعني أي حدث يسهل اجراء هذه العملية (خلية السعر * خلية الثمن) يعني اجمال ثمن كل صنف في خلية العمود الخاص بالاجمالي

والداتا جريد تستخدم في ادخال بيانات الفاتورة فقط

وفي انتظار ردك.....

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#3

الأخ DR.Misho

لكى تعمل سيريال فى خلايا العمود الأول من الداتاجريد يجب عليك ان تلاحظ ان عد الخلايا فى الداتاجريد يبدأ من صفر وليس من 1

انشأ ال Sub التالى أو أنسخه عندك

  Sub MakeSerial()
		For i As Integer = 0 To Dgrd.Rows.Count - 1
			If Dgrd.Rows.Count > 0 Then
				Dgrd.Rows(i).Cells(0).Value = i.ToString + 1

			End If
		Next
	End Sub

ويتم أستدعاء هذا البروسيديور فى حدثان للداتاجريد الاول هو RowsAdded والذى يتم أليا عند أضافة صف للداتا جريد

والثانى هو RowsRemoved وهذا الحدث يتم الياً أذا تم حذف صف من الداتا جريد ليعيد السريلة من جديد كالتالى

  
Private Sub Dgrd_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles Dgrd.RowsAdded
		MakeSerial()
	End Sub

	Private Sub Dgrd_RowsRemoved(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsRemovedEventArgs) Handles Dgrd.RowsRemoved
		MakeSerial()
	End Sub

على أساس ان الداتا جريد أسمه Dgrd ولك ان تسميه اى اسم او حسب ما هو عندك

وهكذا سيتم وضع سيريال فى العمود الأول للداتا جريد

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

الرابــــط هنـــا

وتحت أمرك

كل من فى الوجود يطلب صيداً :::: غير ان الشباك مختلفات

#4

الف الف شكر أخي njd

وجاري التجربة.....

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#5

تسلم ايدك يا أخ njd

الاكواد ميه ميه وشغاله لوز... :clapping:

بس في مشلكة واحدة وهي بسيطة ان شاء الله..

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

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

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

بس بحاول فيها...

وربنا يسهل

وياريت لو تعرفها توضحها

والف شكر مرة أخرى....

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#6

للأسف لم أتوصل الى حل

فأرجو من أي أحد يعرف حل يشارك به

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#7

اسف أخى Dr.Misho على التأخير

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

لنقل محتويات Textboxs إلى الداتا جريد كالتالى

بفرض لدى ثلاث تكيست عاوز انقلهم للداتاجريد

 
  Dim Row As String() = {TextBox1.Text, TextBox2.Text, TextBox3.Text}

  Dgrd.Rows.Add(Row)

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

Dgrd.Rows(1).Cells(2).Value = Textbox1.text

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

واسف مرة آخرى على التأخير

كل من فى الوجود يطلب صيداً :::: غير ان الشباك مختلفات

#8

أخي الغالي njd تسلملي يالغالي على ردك وتواصلك معي

الموضوع كالاتي

أنا استخدم داتا جريد لادخال بيانات فاتورة

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

ما يكتب في التكست بوكس هو الذي يحدد اذا كان المصدر هو الجدول أو ما يحتويه التكست

حيث أن البيانات التي تأتي من الجدول تأتي في حالة استخدام اسكانر وتاخذ صف في الداتا جريد

أما اذا لم تكن تستخدم الاسكانر فيتم كتابة تفاصيلها في التكستات وتنتقل الى الصف التالي في

الدات جريد وهكذا

يعني ببساطة

هي داتا جريد و 3 تكست بوكس

الداتا جريد تأخذ قيمتها من التكستات

والتكستات عبارة عن

1-تكست بوكس .......خاص باسم الصنف

2- تكست بوكس......خاص بثمن الصنف

3- تكست بوكس ...خاص بكمية الصنف

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

حيث اذا استخدم المستخدم الاسكانر فان رقم الصنف أو اسمه يظهر في التتكست بوكس الخاص

بالاسم وفي حدث الظغط انتر كاتب جملة سيلكت تجيب البيانات الخاصة بالصنف من اسمه وكوده

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

أما اذا الصنف لم يكن يستخدم الاسكانر فيتم كتابة تفاصيلة في التكست بوكس ومن ثم تذهب

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

ماتحتويه الدات جريد من بيانات

يعني اذا كان الصنف له باركود بياناته تنتقل تلقائيا الى الجريد (المصدر الداتا بيز ولكن من خلال التكست بوكس الخاص بالاسم حيت أنه الذي يستقبل الباركود)

أما اذا كان لايمتلك باركود فأنه يتم كتابة سعره في التكست الخاص بالسعر أكون محدد الكمية وبعد ذلك يتم الضغط مثلا على حرف a من خلال لوحة المفاتيح ليصنف تحت بضاعة عامة (مثلا) لتنتقل جميع البيانات الى الداتا جريد أو حرف b (مثلا)

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

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

السؤال:

كيف أنقل البيانات من التكستات لتوضع في الخلايا أو الصف المخصص لها في الجريد

كذلك الحال مع البيانات التي تأتي من الجدول في القاعدة

ونقدر نقول ان الجريد تعتبر بتاخد بياناتها من مصدرين مختلفين

الدات بيز و التكستات... هل كدة هيبقى في مشكلة مع الداتا جريد ؟؟؟؟

ولو في حاجة مش واضحه أنا حاضر

وشكرا لك أخي الغالي njd

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#9

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

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#10

أخي الغالي njd بعد تجربة الكود

الكود الخاص بأخذ مايحتويه التكست ووضعه في الداتا جريد شغال تمام

بس المشكلة دلوقتي أنا عايز ذي ما بيأخذ من التكست بوكس ياأخذ من الداتا بيز أو الداتا سيت وأنا جربت الكود اللي في البرنامج تبعك بس للأسف لم يعمل معي

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#11

أخي الغالي njd

كل الاكواد تمام

الله ينور عليك

وتسلم يالغالي على مساعتك لي

والف الف شكر لك مرة أخرى

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#12

الحمد لله انه اشتغل

على العموم انا تحت أمرك لو فى حاجه

كل من فى الوجود يطلب صيداً :::: غير ان الشباك مختلفات

#13

بارك الله فيك لو أردت أن اطبق مثالك بحيث يتم جلب اكبر قيمة من قاعدة البيانات ويضيف عليها كلما اضفت سطر او وضعها في زر حفظ بعد اكمال الادخال في الداتا قريد

اتمنى اجد الجواب اخي المبارك

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