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

كيف يتم اظهار تفاصيل الصنف في سطر داتا جريد فيو

بدأه محمد فؤاد تركي في 8 مارس 2009 · 10 رد · 3,478 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السادة الزملاء

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

مرفق مثال لفاتورة شراء

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

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

وشكرا لكم

Delete_from_Grid.rar

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2
Dim txt As String = TEXSearch.Text
		Me.BindingSource.Filter = "code like'%" & txt.Replace(" ", " ") & "%'"
		If TEXSearch.Text = "" Then
			BindingSource.RemoveFilter()
		End If

طبعا على إفتراض أن الكود String

و الحدث TextChange

تم تعديل هذه المشاركة بواسطة ammsamm في 9 مارس 2009 في 09:56

#3

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

العملية سهلة بس طويلة شوية ، اولاً عدل في تصريح الجدول في الفورم بهذا الشكل

Dim WithEvents dt As New DataTable

بعدها ضيف هذا الكود :

Private Sub dt_ColumnChanging(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles dt.ColumnChanging
		If e.Column.ColumnName = "ItemNumber" Then
			If Not e.ProposedValue Is DBNull.Value AndAlso Not ItemExist(e.ProposedValue) Then
				MessageBox.Show("غير موجود")
				e.ProposedValue = e.Row("ItemNumber")
			End If
		End If
	End Sub

	Private Sub dt_ColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles dt.ColumnChanged
		If e.Column.ColumnName = "ItemNumber" Then
			If Not e.Row("ItemNumber") Is DBNull.Value Then
				Dim dr As DataRow = GetItemRow(e.Row("ItemNumber"))
				If dr IsNot Nothing Then
					e.Row("ItemName") = dr("ItemName")
					e.Row("Unit") = dr("Unit")
					e.Row("UnitPrice") = dr("UnitPrice")
					AddDGV.Refresh()
				End If
			End If
		End If
	End Sub

	Public Function ItemExist(ByVal itemNumber As String) As Boolean
		Dim r As Boolean = False
		Dim cmd As New SqlCommand("SELECT COUNT(*) FROM [ITEMS] WHERE [itemNumber]=@itemNumber", sqlcon)
		cmd.Parameters.AddWithValue("@itemNumber", itemNumber)
		Try
			sqlcon.Open()
			Dim temp As Object = cmd.ExecuteScalar()
			If temp Is DBNull.Value OrElse temp = 0 Then
				r = False
			Else
				r = True
			End If
		Finally
			sqlcon.Close()
		End Try

		Return r
	End Function

	Public Function GetItemRow(ByVal itemNumber As String) As DataRow
		Dim cmd As New SqlCommand("SELECT [ItemName], [Unit], [UnitPrice] FROM [ITEMS] WHERE [itemNumber]=@itemNumber", sqlcon)
		cmd.Parameters.AddWithValue("@itemNumber", itemNumber)
		Dim da As New SqlDataAdapter(cmd)
		Dim tbl As New DataTable
		da.Fill(tbl)
		If tbl.Rows.Count > 0 Then
			Return tbl.Rows(0)
		End If
		Return Nothing
	End Function

بالتوفيق اخي,,

[وسط]لا اله الا انت سبحانك انى كنت من الظالمين

[/وسط]

#4

أخي الغالي حسن

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

بارك الله فيك علي مجهودك الضخم في حل مشكلتي

لكن الموضوع ابسط من ذلك بكثير ويظهر اني موضحتش الامور كما يجب ان تكون

الامر بمنتهي البساطة

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

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

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO
ALTER Proc [dbo].[AddDGVSearchitems]

@ItemNumber nvarchar (50)

as begin if exists (Select ItemNumber,ItemName,Unit,UnitPrice 
from items Where ItemNumber=@ItemNumber)
begin Select ItemName,Unit,UnitPrice 
from items Where ItemNumber=@ItemNumber

end
else
begin Declare @ErrorText as nvarchar (50)
Set @ErrorText = 'هذا الكود غير موجود في دليل أصناف المخازن'
raiserror (@ErrorText ,16 ,1)
end
end

والان ليس امامنا غير ربط هذا الاجراء بالداتا جريد فيو اعتقد في حدث

CellEndEdit

حاولت كثير تطبيق هذا الكود ولكني لم افلح في تطبيقة

Try
			sqlcon.Open()
			Dim cmd As New SqlCommand("AddDGVSearchitems", sqlcon)
			cmd.CommandType = CommandType.StoredProcedure
			cmd.Parameters.AddWithValue("@ItemNumber", AddDGV.Rows(e.RowIndex).Cells("Itemnumber").Value)

			Dim TexInv As SqlDataReader = cmd.ExecuteReader
			TexInv.Read()
			TexInv = AddDGV.Rows(e.RowIndex).Cells("itemname").Value
			TexInv = AddDGV.Rows(e.RowIndex).Cells("Unit").Value
			TexInv = AddDGV.Rows(e.RowIndex).Cells("UnitPrice").Value

		Catch ex As Exception
			MsgBox(ex.Message)
		End Try
		sqlcon.Close()

ودائما يعطيني رسالة خطأ

اعتقد ان الامور وضحت الان

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#5

جرب هذا:

Private Sub AddDGV_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles AddDGV.CellEndEdit
		If e.ColumnIndex = 1 Then
			Try
				Dim cmd As New SqlCommand("AddDGVSearchitems", sqlcon)
				cmd.CommandType = CommandType.StoredProcedure
				cmd.Parameters.AddWithValue("@ItemNumber ", AddDGV(e.ColumnIndex, e.RowIndex).Value)
				Dim da As New SqlDataAdapter(cmd)
				Dim tbl As New DataTable
				da.Fill(tbl)
				Dim drv As DataRowView = AddDGV.Rows(e.RowIndex).DataBoundItem
				drv("ItemName") = tbl.Rows(0)("ItemName")
				drv("Unit") = tbl.Rows(0)("Unit")
				drv("UnitPrice") = tbl.Rows(0)("UnitPrice")
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try
		End If
	End Sub

[وسط]لا اله الا انت سبحانك انى كنت من الظالمين

[/وسط]

#6

نجح الكود وأدي الغرض

بارك الله فيك

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

حاولت ان اضع لكن دون جدوي وذلك لاظهار النتيجة فور الضغط علي زر ادخال من لوحة المفاتيح

AddDGV.RefreshEdit()
AddDGV.EndEdit()
dt.AcceptChanges()

ايضا لاحظت شيء آخر بعد اضافة هذا الكود وهو عند الكتابة بيدي داخل الجريد تظهر مشكلة في Popup الخاصة بالاصناف وهي كالتالي

في حالة عدم استخدام الكتابة اليدوية واستخدام شاشة Popup تشتغل كويس جدا عند حدث الضغط علي الصنف 2 كليك لادراجة داخل الجريد

اما اذا استخدمت الكتابة اليدوية وقمت فعلا بكتابة صنف او اثنين ثم قمت باستدعاء الــ Popup يظهر الخطأ

مع العلم ان هذا هو الكود المستخدم في حدث 2 كليك في شاشة Popup

Private Sub ItemsDGV_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles ItemsDGV.CellDoubleClick
		Try
			If Me.ItemsDGV.Rows(e.RowIndex).IsNewRow Then
				Exit Sub

				'ItemsDGV.Rows(e.RowIndex).Cells("ColumnName").Value is dbnull.value
			Else

				Dim DR As DataRow = TransIn.dt.NewRow
				DR("ItemNumber") = ItemsDGV.Rows(e.RowIndex).Cells("ItemNumber").Value
				DR("ItemName") = ItemsDGV.Rows(e.RowIndex).Cells("ItemName").Value
				DR("Unit") = ItemsDGV.Rows(e.RowIndex).Cells("Unit").Value
				DR("UnitPrice") = ItemsDGV.Rows(e.RowIndex).Cells("UnitPrice").Value
				TransIn.dt.Rows.Add(DR)
				Me.Dispose()
			End If
		Catch ex As Exception
			'MsgBox("غير مسموح الضغط هنا", MsgBoxStyle.Critical, "تحذير")
			MsgBox(ex.Message)
		End Try
	End Sub

مرفق صورة من الخطأ

post-46243-1236622729_thumb.jpg

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 9 مارس 2009 في 21:30

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7

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

هذا هو نفس الكود السابق الخاص بـ CellEndEdit مع تعديل بسيط

Private Sub AddDGV_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles AddDGV.CellEndEdit
		If e.ColumnIndex = 1 Then
			Try
				Dim cmd As New SqlCommand("AddDGVSearchitems", sqlcon)
				cmd.CommandType = CommandType.StoredProcedure
				cmd.Parameters.AddWithValue("@ItemNumber ", AddDGV(e.ColumnIndex, e.RowIndex).Value)
				Dim da As New SqlDataAdapter(cmd)
				Dim tbl As New DataTable
				da.Fill(tbl)
				Dim drv As DataRowView = AddDGV.Rows(e.RowIndex).DataBoundItem
				drv("ItemName") = tbl.Rows(0)("ItemName")
				drv("Unit") = tbl.Rows(0)("Unit")
				drv("UnitPrice") = tbl.Rows(0)("UnitPrice")
				AddDGV.Refresh()
			Catch ex As Exception
				MessageBox.Show(ex.Message)
				AddDGV(e.ColumnIndex, e.RowIndex).Value = DBNull.Value
			End Try
		End If
	End Sub

لاحظ استخدام AddDGV.Refresh() .

بالنسبة لمشكلة Popup لم استطع تحديد المشكلة لكن يظهر ان العمود "ItemNumber" غير موجود في الجدول المستخدم :) .

[وسط]لا اله الا انت سبحانك انى كنت من الظالمين

[/وسط]

#8

بارك الله فيك أخي الغالي حسن تحقق المطلوب بالضبط

ماشاء الله عليك علم واخلاق عالية

عامة للافادة

وبحثي دائما عن الحلول البديلة توصلت لهذا الحل ايضا ليفي بالغرض وفكرة يتم طرحها لم يريد استخدام هذه الطريقة وهي كتابة كود الصنف في مربع

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

post-46243-1236741171_thumb.jpg

Private Sub TexDGVSearch_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TexDGVSearch.KeyDown

		If e.KeyCode <> Keys.Enter Then Exit Sub
			sqlcon.Open()
		If e.KeyCode = Keys.Enter Then
			TEXDGVName.Focus()
		End If
			Try
				Dim cmd As New SqlCommand("AddDGVSearchitems", sqlcon)
				cmd.CommandType = CommandType.StoredProcedure
				cmd.Parameters.AddWithValue("@ItemNumber ", TexDGVSearch.Text)

				Dim TexDGV As SqlDataReader = cmd.ExecuteReader
			TexDGV.Read()
			TEXDGVName.Text = TexDGV("ItemName").ToString
			' TexDGVSearch.Text = ""
		Catch ex As Exception
			MsgBox("هذا الكود غير موجود في دليل اصناف المخازن", MsgBoxStyle.Critical, "تحذير")
			' MsgBox(ex.Message)
			ItemsSearchPopup.ShowDialog()
		End Try
		sqlcon.Close()
	End Sub

ثم هذا الكود في حدث الضغط علي مربع نص اسم الصنف

Private Sub TEXDGVName_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TEXDGVName.KeyDown
		Try

			If e.KeyCode = Keys.Enter Then
				sqlcon.Open()
				Dim cmd As New SqlCommand("AddDGVSearchitems", sqlcon)
				cmd.CommandType = CommandType.StoredProcedure
				cmd.Parameters.AddWithValue("@ItemNumber ", TexDGVSearch.Text)

				Dim TexDGV As SqlDataReader = cmd.ExecuteReader
				Do While TexDGV.Read()
					Dim DR As DataRow = dt.NewRow

					DR("ItemNumber") = TexDGV("ItemNumber")
					DR("ItemName") = TexDGV("ItemName")
					DR("Unit") = TexDGV("Unit")
					DR("UnitPrice") = TexDGV("UnitPrice")
					dt.Rows.Add(DR)
				Loop
				TexDGVSearch.Text = ""
				TEXDGVName.Text = ""
			End If
		Catch ex As Exception
			MsgBox(ex.Message)
		End Try

		sqlcon.Close()
	End Sub

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

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#9

شكراً على هذا الكلام الجميل، اكرمك الله ووفقك إلى كل خير

[وسط]لا اله الا انت سبحانك انى كنت من الظالمين

[/وسط]

#10

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

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

شكرا لك وبارك الله فيك

#11

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

عموماً ! جاري دراسة المثال المرفق للاستفادة منه

تم تعديل هذه المشاركة بواسطة human2x في 21 سبتمبر 2009 في 13:47

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