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

مشكلتين : (1- Fieldvalidator. و 2- Dataset ) ..

بدأه ubd17 في 16 أبريل 2008 · 13 رد · 1,523 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم ...

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

يا شباب / شابات ..

عندي مشكلتين بس ما أعرف حلهم :

1- المشكلةالأولى في FieldValidator في داخل gridveiw , (المثال في الصورة) .

792341-226.jpg

العملية : لما يضغط الشيك بوكس يحرر التكست بوكس تبع الكمية .

يمكن إختيار واحد أوكثر , فلو إختار واحد دون الباقي يظل validation شغال .

كيف أعطل الباقي ؟؟؟

2- المشكلة الثانية في DataSet ، لما أريد حذف صف من داتا جرد (Data Surce :DataSet) :

792341-227.jpg

العملية : الحذف داخل For Loop لما يحذف من داتاست يحذف مباشره

فلما أختار بعد الصف الأول يحذف فيصبح عدد الصفوف أقل من إلي في For Loop ويطلع هذا الخطأ :

اقتباس
There is no row at position 2.

وهذا الكود :

اقتباس
For c = 0 To len - 1

ChkBox = grvOdr.Rows©.FindControl("CheckBox2") 'For Delete

If ChkBox.Checked Then

dsOrdGrd.Tables("Ordrer_Det").Rows.RemoveAt©

Session("SaveDS") = dsOrdGrd

End If

Next

grvOdr.DataSource = dsOrdGrd

grvOdr.DataBind()

ولكم جزيل شكري ..

موفقين ..

#2

المشكلة الأولى:

يمكنك وضع Autopostback على كل تشيكبوكس تقوم عندها بتحرير التيكستبوكس التابع له وتفعيل الفاليداشون.

أو يمكنك عمل هذا الموضوع بالجافاسكريبت و لكنه موضوع شائك نوعاً ما.

المشكلة الثانية:

للحذف استخدم الأمر

dsOrdGrd.Tables("Ordrer_Det").Rows(c).Delete

و انقل أمر التعيين الى السيشن خارج اللووب و ضع السطر التالي

dsOrdGrd.Tables("Ordrer_Det").AcceptChanges()
#3
اقتباس
يمكنك وضع Autopostback على كل تشيكبوكس تقوم عندها بتحرير التيكستبوكس التابع له وتفعيل الفاليداشون.

كيف أعملها لما أعمل تشك يفعل الفاليداشون ؟؟؟

------------

للأسف برظو مش شغاله ..

		For c = 0 To len - 1
			ChkBox = grvOdr.Rows(c).FindControl("CheckBox2")
			If ChkBox.Checked Then

				dsOrdGrd.Tables("Ordrer_Det").Rows(c).Delete()
				dsOrdGrd.Tables("Ordrer_Det").AcceptChanges()

		  Next
		Session("SaveDS") = dsOrdGrd

اقتباس
There is no row at position 2.

الخطأ يظهر لما أحدد أكثر من واحد , لما أحذف واحد بعد واحد أوكيه ..

#4

حلينا المشكلة الأولى : بهذه الطريقة :

في حدث الشكد وضعت الكود :

	  If ChkBox.Checked Then
				lblQua.Enabled = True
			Else
				 lblQua.Enabled = False
				rfv.Enabled = False
			End If

وزبطت معاي ..

باقي المشكلة الثانية ......... :(

#5
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
	<title>Untitled Page</title>
</head>
<body>
	<form id="form1" runat="server">
	<div>
		<asp:GridView ID="GridView1" runat="server" ShowHeader="False" Width="353px">
			<Columns>
				<asp:TemplateField>
					<ItemTemplate>
						<asp:CheckBox ID="CheckBox1" runat="server" />
					</ItemTemplate>
				</asp:TemplateField>
			</Columns>
		</asp:GridView>
		<asp:Button ID="btnDel" runat="server" Text="delete" /><br />
		 </div>
	</form>
</body>
</html>

Imports System.Data
Partial Class _Default
	Inherits System.Web.UI.Page
	Dim ds As DataSet
	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

		If Not IsPostBack Then
			ds = New DataSet()
			ds.Tables.Add()
			ds.Tables(0).Columns.Add()
			ds.Tables(0).Columns.Add()
			For index As Integer = 1 To 10
				ds.Tables(0).Rows.Add("mohummad", "summakiea")
			Next

			GridView1.DataSource = ds
			GridView1.DataBind()

			Session("ds") = ds
		Else
			GridView1.DataSource = CType(Session("ds"), DataSet)
		End If
	End Sub

	Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDel.Click
		ds = CType(Session("ds"), DataSet)
		For index As Integer = 0 To GridView1.Rows.Count - 1
			Dim checkb As CheckBox = GridView1.Rows(index).FindControl("CheckBox1")
			If checkb.Checked Then
				ds.Tables(0).Rows(index).Delete()
			End If
		Next
		ds.AcceptChanges()
		GridView1.DataBind()
		Session("ds") = ds
	End Sub
End Class

792805-214.jpg

download click here

تم تعديل هذه المشاركة بواسطة محمد سماقية في 17 أبريل 2008 في 12:53

-----------------------------------------------------------------------------------------------------------------------------





 

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

Mohammad Sonaiea
 

#6

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

عزيزي : محمد ..

شاكر لك الرد ..

لكن للأسف مش شغال صح (يشتغل لأول مرة فقط ) ..

في الصفحة التي أرفقتها تعبئة الجرد مرة واحدة فقط فلذلك لا تظهر المشكلة

ولكن جرب بعد أن تحذف المنتجات إضغط BackSpace وإحذف مرة أخرى وستظهر المشكلة ..

هذه الرسالة

اقتباس
Server Error in '/WebSite5' Application.

--------------------------------------------------------------------------------

There is no row at position 2.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IndexOutOfRangeException: There is no row at position 2.

Source Error:

Line 28: Dim checkb As CheckBox = GridView1.Rows(index).FindControl("CheckBox1")

Line 29: If checkb.Checked Then

Line 30: ds.Tables(0).Rows(index).Delete()

Line 31: End If

Line 32: Next

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

وبإنتظار الرد..

#7

اخي أكيد سوف تحدث مشكلة والسبب عند النقر على الزر back او backspace سوف يتغير عدد الاسطر الـgrid اي اصبح اختلاف بعدد الاسطر مابين الـgrid والـsession

وعند الحذف سوف يتم حذف اسطر غير موجودة بالـsession

والحل هو إلغاء زر الـback وهذا صعب

هناك طريقة باستخدام الـjavascript

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

history.forward();

وهذا هو التعديل

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="PRAGMA" value="NO-CACHE">
<meta http-equiv="Expires" content="Mon, 01 Jan 1990 12:00:00 GMT">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
	<title>Untitled Page</title>
	<script>
	function backButtonOverride()
	{
	  setTimeout("backButtonOverrideBody()", 0);
	}
	function backButtonOverrideBody()
	{
	  try {
		history.forward();
	  } catch (e) {
	  }
	  setTimeout("backButtonOverrideBody()", 0);
	}
</script>
</head>
<body onLoad="backButtonOverride()">
	<form id="form1" runat="server">
	<div>
		<asp:GridView ID="GridView1" runat="server" ShowHeader="False" Width="353px">
			<Columns>
				<asp:TemplateField>
					<ItemTemplate>
						<asp:CheckBox ID="CheckBox1" runat="server" />
					</ItemTemplate>
				</asp:TemplateField>
			</Columns>
		</asp:GridView>
		<asp:Button ID="btnDel" runat="server" Text="delete" /><br />
		 </div>
	</form>
</body>
</html>

download

تم تعديل هذه المشاركة بواسطة محمد سماقية في 19 أبريل 2008 في 10:14

-----------------------------------------------------------------------------------------------------------------------------





 

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

Mohammad Sonaiea
 

#8

السلام عليك عزيزي : محمد ..

العفو أنا لم أقصد أنني أستخدم زر Back Space .. وإنما ذكرتها للتوضيح ..

المشكلة عندي مثل ما ذكرت :

اقتباس
اخي أكيد سوف تحدث مشكلة والسبب عند النقر على الزر back او backspace سوف يتغير عدد الاسطر الـgrid اي اصبح اختلاف بعدد الاسطر مابين الـgrid والـsession

وعند الحذف سوف يتم حذف اسطر غير موجودة بالـsession

سأوضح آليه العمل :

عندي جريد فيو تعرض منتجات ..

793655-162.jpg

و جريدفيو لعرض الطلبات ( كالفاتورة) ..

793655-163.jpg

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

المنتجات تعرض حسب التصنيف من دروب داون لست :

ولهذا العملية تتكرر ( وليس BackSpace Button ) ..

فقد يصادف بأنه يضيف منتجات لقائمة الطلبات ثم يريد حذفها ..

في المرة الأولى تنفذ بدون مشاكل ولكن في المرة الثانية تظهر المشكلة نفسها ..

أرجو أن تكون الصورة واضحة :) ..

وموفق لكل خير عزيزي ..

تم تعديل هذه المشاركة بواسطة ubd17 في 19 أبريل 2008 في 10:31

#9

اخي

حسب الحل السابق يجب ان لايحدث مشكلة .......

على مااعتقد لديك مشكلة بالاضافة من دروب داون

بجي ان تنتبه ان الاضافة يجب ان تكون على الـsession وليس على grid

على كل حال اذا الفكرة لم تصل ضع لنا الكود الذي يضيف من الـdropdown إلى الفاتورة

-----------------------------------------------------------------------------------------------------------------------------





 

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

Mohammad Sonaiea
 

#10

السلام عزيزي : محمد ..

دروب داون لست ليس له علاقة بالطلبيات وإنما لعرض المنتجات فقط ...

لأن المنتجات كثيرة وتعرض حسب التصنيف ..

وعرض المنتجات من sql Data source عند إختيار الصنف الموجود في الدروب داون لست : وهذاsql cmd:

SELECT * FROM [Products] WHERE ([Prd_Type] = @Prd_Type)

وهذا الكود تبع الدروب داون لست :

	Protected Sub ddlPrdType_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlPrdType.SelectedIndexChanged
		grvPrdByType.Focus()
		grvPrdByType.DataBind()
		Page.MaintainScrollPositionOnPostBack = True
	End Sub

-------------------

اقتباس
حسب الحل السابق يجب ان لايحدث مشكلة .......

بالفعل أخي ..

ولكن لمرة واحدة فقط ..

فما الحل ..

موفق ..

#11

ألا يوجد حل .؟؟؟؟

:(

#12

.

.

وينكم يا جماعة ..

شوفوا لي حل طلعت روحي من هالإيرور ..

.

.

#13

1. بالنسبة للفاليديشن :

اذا كنت تستخدم asp.net 2 اذا انحلت المشكلة ، ما عليك الا انك تستخدم ValidationGroup

2. أما استخدام checkbox للحذف فلا أرى انه شي عملي - هو ممكن - ولكن استخدم السهل الممتنع وهو استخدام حذف صف واحد فقط ،،

#14

Scoool :

اقتباس
2. أما استخدام checkbox للحذف فلا أرى انه شي عملي - هو ممكن - ولكن استخدم السهل الممتنع وهو استخدام حذف صف واحد فقط ،،

تسلم على الرد ..

بالفعل عملتها كذلك ..

موفق ..

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