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

التعامل جيدا مع خلايا datagrid و التحكم بحرية

مغلق
بدأه moh1983 في 8 يونيو 2006 · 10 رد · 1,375 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي جدول اسمه الحسابات موجود فيه

اسم الحساب

قيمة الحساب

هذا الجدول مربوط ب datagrid

اسم الحساب موجود في datagrid عللى شكل combobox

الان عند اختيار اسم الحساب تريد ان ان تظهر لي قيمته في textbox

توصلت لحل بسيط لهذه المشكلة و لكنه لا يفيد جيدا و الكود هو

 sql = New SqlClient.SqlCommand("select القيمة from اسم الجدول where اسم الحساب او رقمه = " & NDataGrid1.Item(0, 0) & "", conn)
textbox.Text = sql.ExecuteScalar

و لكنكم كما تلاحظون فالقيمة التي احصل عليها هي للعمود و السطر رقم (0,0)

و ما اريده هو ليس قيمة معينة من الجدول مثل (0,0)اي العمود الأول و السطر الأول

ما اريده هو اي قيمة اكون انا واقف عندها مثلا انا واقف عند العمود الأول و السطر الثاني أي (0,1) و هكذا فهل الحل يكمن في استخدام loop

ارجو ان يكون كلامي واضح و ارجو المساعدة للضرورة

#2

تستطيع استخدام الخاصية CurrentCell للداتا جرايد لتحديد الخلية الحالية

جرب هذا الكود

Private Sub NDataGrid_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NDataGrid1.Click
		MsgBox(NDataGrid1.CurrentCell.ToString)
	End Sub

اللهم انت ربي , لا إله إلا أنت خلقتني و أنا عبدك و أنا على عهدك و وعدك ماستطعت , أبوء لك بنعمتك علي و أبوء بذنبي فاغفر لي فإنه لا يغفر الذنوب إلا أنت

آخر الدروس و المقالات:

Oracle Data Provider (ODP.NET)

#3

مشكور بس ما الفائدة :(

حيث حولت الكود الى

sql = New SqlClient.SqlCommand("select القيمة from اسم الجدول where اسم الحساب او رقمه =  '" & NDataGrid1.CurrentCell.ToString & "'", conn)
textbox.Text = sql.ExecuteScalar

و لم يجدي نفعا و لم يعطني اي قيمة للمتغير textbox

هل من حل :(

#4

السلام عليكم

إذا كنت تعمل على بيئة 2005 فالامر غاية في السهولة

أولاً تقوم بتعريف متغير من نوع object بهذا الشكل

 Private objCell As Object = Nothing

ثانياً في حدث CurrentCellChanged تقوم بإلتقاط القيمة التي في الخلية الحالية وتضعها في المتغير المعرف في الاعلى .

 Private Sub MainDataGridView_CurrentCellChanged( _
	ByVal sender As Object, ByVal e As System.EventArgs) _
	Handles MainDataGridView.CurrentCellChanged

		objCell = Me.MainDataGridView.CurrentCell.Value

	End Sub

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

  Private Sub MainDataGridView_CellClick( _
	ByVal sender As Object, _
	ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
	Handles MainDataGridView.CellClick

		Me.txtGetData.Text = objCell.ToString

	End Sub

إذا كنت تبحث عن الطريقة في 2003 فماعليك سوى أن تبحث في المنتدى في هذا القسم بالتحديد و بالكلمة المفتاحية DataGrid فقط

وستجد الكثير من الحلول في ذلك.

بالتوفيق إن شاء الله

في المثال يتضح المقال

#5

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

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

اليكم كود غير معقول طبعا و لكن يا ريت يتنفذ

SQL = SELECT FEIDL_VALUE  FORM TABLENAME WHERE FEILD_VALUE = DATAGRID.COLUMNNAME اي اسم عمود محدد

هل من .................. مغيث

تم تعديل هذه المشاركة بواسطة moh1983 في 8 يونيو 2006 في 17:07

#6

قم بتعديل الكود الذي كتبته ليصبح :

Dim col As Int16 = NDataGrid1.CurrentCell.ColumnNumber
Dim row As Int16 = NDataGrid1.CurrentCell.RowNumber
If NDataGrid1.Item(row, col).GetType.ToString = GetType(String).ToString Then
sql = New SqlClient.SqlCommand("select القيمة from اسم الجدول where اسم الحساب او رقمه =  '" & NDataGrid1.Item(row, col) & "'", conn)
textbox.Text = sql.ExecuteScalar
end if

ضع هذا الكود في حدث CurrentCellChanged للداتا جريد

و إن شاء الله سينجح هذا الكود

بعد ذلك استبدل جملة الشرط بالشرط المناسب لبرنامجك

اللهم انت ربي , لا إله إلا أنت خلقتني و أنا عبدك و أنا على عهدك و وعدك ماستطعت , أبوء لك بنعمتك علي و أبوء بذنبي فاغفر لي فإنه لا يغفر الذنوب إلا أنت

آخر الدروس و المقالات:

Oracle Data Provider (ODP.NET)

#7

للاسف لم تنجح :( و مشكور اخي على المحاولة

هذا ما حصل

 Dim col As Int16 = NDataGrid1.CurrentCell.ColumnNumber
		Dim row As Int16 = NDataGrid1.CurrentCell.RowNumber
		If NDataGrid1.Item(row, col).GetType.ToString = GetType(String).ToString Then
			conn.Open()
			sqlcmd = New SqlClient.SqlCommand("select median from balance_detail where balance_detail_no = " & NDataGrid1.Item(col, row) & "", conn)
			sqlcmd.ExecuteScalar()
			selectmedian1.Text = sqlcmd.ExecuteScalar
			conn.Close()
		End If

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

لنفترض مثلا عندي داتاجريد فيها اسماء حقول هي

اسم المنتجcomboboxdatagrid

كمية المنتج textboxdatagrid

الان عند اختيار اسم المنتج من الصف اريد ان تظهر لي كمية المنتج الباقية في صف كمية المنتج

طبعا انسو انكو تضعو لينك master detail لانه لا يفيدني هنا :)

ارجو الرد يا جماعة

تم تعديل هذه المشاركة بواسطة moh1983 في 8 يونيو 2006 في 18:41

#8

هلا وضحت مالذي حدث بالضبط , يعني هل ظهر خطأ معين وماهو هذا الخطأ

جرب وضع NDataGrid1.Item(col, row) داخل متغير و انظر ماهي القيمة التي تخزن فيه , فقد يكون الخطأ بسبب آخر , لأني متأكد من الكود السابق و قد جربته و نجح تماماً

بالتوفيق أخي

اللهم انت ربي , لا إله إلا أنت خلقتني و أنا عبدك و أنا على عهدك و وعدك ماستطعت , أبوء لك بنعمتك علي و أبوء بذنبي فاغفر لي فإنه لا يغفر الذنوب إلا أنت

آخر الدروس و المقالات:

Oracle Data Provider (ODP.NET)

#9

السلام عليكم

لا يظهر لي اخطاء انما التعامل مش بمحله فأنا عندما قمت بوضع الكود التالي

where balance_detail_no = " & NDataGrid1.Item(col, row)

لم احدد له اني اريد القيم التي تكون تابعة للعمود الأول من datagrid و اسطرها

مع ذلك لم يعطني اي قيمة و لم يظهر لي اي خطأ اصلا مافي سبب لظهور الخطأ :)

اي اريد ان احضر قيمه من داخل قاعدة البيانات حسب ما هو موضوع المؤشر على عمود معين من datagrid

اي أفكار اخرى ؟

تم تعديل هذه المشاركة بواسطة moh1983 في 8 يونيو 2006 في 20:17

#10

يا عزيزي الكود السابق يقوم بإحضار قيمة الخلية في الداتا جريد و هذا ما فهمته من سؤالك , اعتماداً على موقع هذه الخلية و المحدد برقم السطر Row و رقم العمود Col

الآن إذا أردت بيانات balance_detail_no من الداتا جريد , فعليك أن تثبت رقم العمود بحيث يساوي موقع هذا الحقل في الداتا جريد

يعني إذا كان الحقل balance_detail_no موجود في العمود الثاني سيكون الكود كالتالي:

where balance_detail_no = " & NDataGrid1.Item(1, row)

هنا و عند تنفيذ الكود ستكون قيمة NDataGrid1.Item(1, row) تساوي قيمة الخلية التي تم النقر عليها و لتكن 654

و بالتالي ستكون جملة الاستعلام

select fieldName from TableName where balance_detail_no =654

اليس هذا ما تريده

تحياتي

اللهم انت ربي , لا إله إلا أنت خلقتني و أنا عبدك و أنا على عهدك و وعدك ماستطعت , أبوء لك بنعمتك علي و أبوء بذنبي فاغفر لي فإنه لا يغفر الذنوب إلا أنت

آخر الدروس و المقالات:

Oracle Data Provider (ODP.NET)

#11

مشكور اخي و الحمد لله زبطت و المشكلة كانت بجملة IF ما كان الها داعي :)

 Try
			Dim col As Int16 = NDataGrid1.CurrentCell.ColumnNumber
			Dim row As Int16 = NDataGrid1.CurrentCell.RowNumber
			' If NDataGrid1.Item(row, col).GetType.ToString = GetType(String).ToString Then
			conn.Open()
			sqlcmd = New SqlClient.SqlCommand("select median from balance_detail where balance_detail_no = '" & NDataGrid1.Item(row, col) & "'", conn)
			sqlcmd.ExecuteScalar()
			selectmedian1.Text = sqlcmd.ExecuteScalar
			conn.Close()
			' End If
		Catch ex As Exception
			conn.Close() 'Dpls2.sanad_head.Reset()
			'  conn.Close()
			MessageBox.Show(ex.Message)
		End Try

بس في مشكلة و هي انها زبطت معي لما حطيت الكود في BOTTUN و لكن عندما اضعه في CURRENTCELLCHANGED ما بيزبط و ما بيعطيني قيم لماذا ؟؟؟؟؟؟؟؟

شكرا على المتابعة :) :)

تم تعديل هذه المشاركة بواسطة moh1983 في 9 يونيو 2006 في 13:54

هذا الموضوع مغلق.

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