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

ما السبب في هذا الخطا

بدأه ananabha في 27 أغسطس 2009 · 4 رد · 375 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي زرار يقوم باضافة Textboxes ( داخل بانل ) بالعدد اللي يكتبه المستخدم

والكود اللي على الزرار كالتالي

=================================

For i As Integer = 1 To TextBox1.Text

Dim txt As New TextBox

txt.ID = "txt" & i

Dim literal1 As New Literal

literal1.Text = i & " : "

Dim literal2 As New Literal

literal2.Text = "<br />"

Panel1.Controls.Add(literal1)

Panel1.Controls.Add(txt)

Panel1.Controls.Add(literal2)

Next

=================================

وهذا الكود شغال صح بدون مشاكل

ولدي زرار اخر يقوم بادخال القيم اللي موجودة في TextBoxes الجديدة التي تم اضافتها في جدول في قاعدة البيانات

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

=================================

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

For Each txt As TextBox In Panel1.Controls

conn = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString1").ConnectionString)

conn.Open()

cmd = New SqlCommand()

cmd.Connection = conn

cmd.CommandText = "Insert Into Towns(Town) Values('" & txt.Text & "')"

cmd.ExecuteNonQuery()

conn.Close()

Next

End Sub

=================================

ولكن عندما اضغط عليه يظهر لي الخطأ التالي :

Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.WebControls.TextBox'.

كيف يمكن علاج هذا الخطأ

والله الموفق

تم تعديل هذه المشاركة بواسطة ananabha في 27 أغسطس 2009 في 17:16

#2

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

سبب الخطأ انك تعاملت مع المتغير مباشرة على انه تكست بوكس في حين ان المتغير سيمر على الـControls الأخرى الموجودة داخل البانل

لذلك يجب تحويله الى Text Box قبل التعامل معه

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

For Each ctrl As Control In Panel1.Controls
	If TypeOf ctrl Is TextBox Then

		DirectCast(ctrl, TextBox).Text = "Mando"

	End If
Next

بالتوفيق

إذا أردت أن تـجـعـلـنـي سـعـيـداً ... فـعـلـمـنـي شـيـئـاً جـديـداً

#3

أخي الفاضل Mr Mando

انا جربت طريقتك ولكن عملية Insert لاتحدث وتقريبا لا يتم الدخول داخل جملة If

) لا يظهر رسالة خطأ ولكن لايحدث Insert (

الكود اللي انا كتبته هو

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

For Each ctrl As Control In Panel1.Controls

If TypeOf ctrl Is TextBox Then

Dim txt As TextBox = DirectCast(ctrl, TextBox)

txt.Text = DirectCast(ctrl, TextBox).Text

conn = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString1").ConnectionString)

conn.Open()

cmd = New SqlCommand()

cmd.Connection = conn

cmd.CommandText = "Insert Into Towns(Town) Values('000')"

cmd.ExecuteNonQuery()

conn.Close()

End If

Next

End Sub

تقريبا كده المشكلة انه لايتم الدخول داخل جملة If

لاني حتى جربت ان ادخل نص عادي بدون قيمة الكنترول ولم يحدث الــInsert

ارجو منك المساعدة ولك مني خالص الشكر والتقدير

#4

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

رغم إني مش فاهم ايه وجهة نظرك من عملية التكرار لكن على كل حال ده حل مؤقت

في أعلى الكلاس قم بتعريف متغير من نوع Panel ويكون Shared كالتالي:

Shared pnl As New Panel()

تحت زي إضافة الـ TextBoxes قم بوضع الكود التالي في آخر الكود الموجود تحت الزر

pnl.Controls.Clear()
pnl = Panel1

وفي جملة الـ For Each غير Panel إلى pnl

هناك عدة ملاحظات على الكود الذي تستخدمه

أهمها أنك تقوم بفتح الاتصال داخل الـ For Each وده غلط كبير جدا وهيعمل بطء شديد في العمل على السيرفر

جملة الـInsert ستقوم بإضافة '000' بعدد الـTextBoxes الموجودة

بالتوفيق أخي

إذا أردت أن تـجـعـلـنـي سـعـيـداً ... فـعـلـمـنـي شـيـئـاً جـديـداً

#5

أخي الكريم

اولا اشكرك على اهتمامك بموضوعي وسرعة تجاوبك

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

ثانيا انا عملت زي ما انت قولت لي وفعلا الـinsert اشتغل بس القيمة لاتدخل ....

يدخل قيم فارغة ... Null

انا ارفقت لك نموذج من المشروع في المرفقات

الله يوفقك شوفه وقولي ايه سبب ان القيم بتدخل فاضية

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

Sample.rar

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