PDA

View Full Version : سوال: مشکل در ارسال پارامتر ها به ساب (بحث کلاس)



shocraneh
جمعه 20 آذر 1388, 00:36 صبح
کلاس ها
Public Class Item
Private _Url As String
Private _ID As Integer
Private _Caption As String

Public Sub Item(ByVal Url As String, ByVal Caption As String)

_Url = Url
_Caption = Caption

End Sub
end class


Public Class DAProject
Public Function InsertData(ByVal Item As Item) As Boolean
End Function
End Class

در default
Protected Sub insert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles insert.Click
Dim sql As New DAProject

Dim value As Boolean
' value = sql.InsertData(url.Text, caption.Text)'شیوه اول
Dim item1 As New Item ' شیوه دوم
item1 = Items(url.Text)
item1 = Items(caption.Text)
value = sql.InsertData(item1)

End Sub


اگه ساب itemرو تعریف نکنم و تکس ها رو مستقیما به تابع بفرستم (شیوه اول ) مشکلی نداره
اما اگه از ساب item استفاده کنم نمیدونم چی کار کنم ؟روی تابع اررور زیر رو می ده
Object reference not set to an instance of an object.

salehbagheri
جمعه 20 آذر 1388, 08:51 صبح
مهندس عزيز! در كدنويسي كمي دقت كنيد!

هنگام تعريف تابع Item دو پارامتر ورودي براش تعريف كرديد، به اين صورت:


Public Sub Item(ByVal Url As String, ByVal Caption As String)


ولي هنگام استفاده، فقط يه پارامتر ورودي بهش ميديد كه اين اشتباهه! بايد به اين صورت عمل كنيد:


item1 = Item(url.Text, caption.Text)

shocraneh
شنبه 21 آذر 1388, 08:25 صبح
مهندس عزيز! در كدنويسي كمي دقت كنيد!

هنگام تعريف تابع Item دو پارامتر ورودي براش تعريف كرديد، به اين صورت:


Public Sub Item(ByVal Url As String, ByVal Caption As String)


ولي هنگام استفاده، فقط يه پارامتر ورودي بهش ميديد كه اين اشتباهه! بايد به اين صورت عمل كنيد:


item1 = Items(url.Text, caption.Text)


دوست من منم می دونم دو متغیر دارم . من دقیقا مثل کد شمارو نوشتم اما زیر خط دار میشه ؟؟؟


در كل كمي كدهاتون نامفهومه و اشكالات عجيبي داره! مثلا كد زير:


value = sql.InsertData(url.Text, caption.Text)

شما در اين كد از كلاس يا فضاي نام Parent به نام SQL استفاده كرديد ولي در تعريف تابع InsertData بايد از كلاس DAProject استفاده كنيد!!!!

فضای نام parent نمی دونم یعنی چی ؟؟در ضمن فکر کنم به این خط توجه نکردید
Dim sql As New DAProject
من دو تا تکس رو به ساب item فرستادم (مثلا :برای اینکه ارزیابی بشن .....)حالا تابع من دارای یک ورودی item هست . حالا من نمی دونم در فراخوانی چی کار کنم ؟؟؟؟؟


در ضمن تابع مذكور فقط يه پارامتر ورودي مي پذيره كه از نوع Item هست ولي پارامترهايي كه شما داديد نه تنها بيشتر از يكي هست، بلكه از جنس رشته اي به حساب مياد كه دليلش نامعلومه!!!

salehbagheri
شنبه 21 آذر 1388, 09:03 صبح
Item درسته يا Items ؟


item1 = Items(url.Text)

shocraneh
شنبه 21 آذر 1388, 17:51 عصر
من دقیقا همون چیزی که تو تاپیک 2 فرمودید رو نوشتم . زیر خط دار میشه ومی گه
item is a type , cannot be used as an expression


تو مقاله ای که خودتون با عنوان مبتدی ها ارائه داده بودید کلاس item رو مطرح کرده بودید اما برای استفادش
چیزی نگفته بودید . من این جور تصور کردم که برای ورودی هایی که باید اعتبار سنجی بشن مورد استفاده قرار می گیره
من هنوز تو استفادش موندم ؟؟؟؟؟

shocraneh
سه شنبه 24 آذر 1388, 09:41 صبح
این مورد عکس قضیه بالاست؟؟البته بالایی هنوز حل نشده
من می خام تو کلاس یه ریدر داشته باشم . آیاباید اطلاعات رو به صورت لیست به من بده ؟یا ..؟؟؟؟


Public Class DAProject
Public Function ReadData() As List(Of BLLproject)

Try
Dim List As New List(Of BLLproject)
Dim SqlConnection As SqlConnection = Me.GetConnection()
Dim SqlCommand As New SqlCommand("ReadDatabase", SqlConnection)
SqlCommand.CommandType = CommandType.StoredProcedure

SqlConnection.Open()
Dim Reader As SqlDataReader = SqlCommand.ExecuteReader()
Dim Item As BLLproject

While Reader.Read
Item = New BLLproject
Item.ID = Reader("AmlakCode")
Item.Url = Reader("Url")
List.Add(Item)
End While

SqlConnection.Close()
Return List

Catch ex As Exception
Throw New InvalidOperationException(ex.Message)

End Try
End Function
''''''''''''''''''''''
Public Class BLLproject
Private _Url As String
Private _ID As Integer
Public Sub Item()as list ' ورودی که نداره وخروجی رو چه طوری بنویسم
' اینجا چی بنویسم
Return List(Of Action(Of''''????/////////////



End Sub


Public Property ID() As Integer
Get
Return _ID

End Get
Set(ByVal value As Integer)
_ID = value

End Set
End Property
Public Property Url() As String
Get
Return _Url

End Get
Set(ByVal value As String)
_Url = value

End Set
End Property

'''''''''''''''''''''''''''''''صفحه
Partial Class _Default
Dim obj As New BLLproject

Dim list As List(Of '????????????????????

جدای بحث ریدر من می خام در صفحه در حالت اجرا سطر و ستون ایجاد کنه و فامیل افراد روی اون
نوشته بشه .نمی دونم از ریدر که لیست در بیاد چی کار کنم ؟ ؟؟حلقه براش بزارم ؟؟؟خوب تعدادش تا چنده

salehbagheri
پنج شنبه 26 آذر 1388, 23:07 عصر
من دقیقا همون چیزی که تو تاپیک 2 فرمودید رو نوشتم . زیر خط دار میشه ومی گه
item is a type , cannot be used as an expression

مشكل شما دقيقاً معلوم نيست! احتمالا شما فضاي نام مربوط به كلاس Item رو در صفحه وارد نكرديد!

به اين صورت امتحان كنيد:


item1 = Item.Item(url.Text, caption.Text)


يا اينكه فضاي نام رو در بالاي صفحه وارد كنيد!

در صورت عدم حل مشكل، از طريق PM پروژه رو ارسال كنيد!

shocraneh
جمعه 27 آذر 1388, 10:45 صبح
پروژه رو گذاشتم

salehbagheri
شنبه 28 آذر 1388, 22:44 عصر
اين يك نمونه ساده و سه لايه براي مبتديان هست كه عمليات Insert و Update و Delete و Select رو بر روي پايگاه داده انجام ميده!

ديدنش خالي از لطف نيست!

همچنين تمامي مشكلات دوست عزيز shocraneh (http://barnamenevis.org/forum/member.php?u=79035) هم در اين پروژه حل خواهد شد!

اين نمونه رو سه روزه نوشتم و ممكنه اشكالاتي داشته باشه كه پيشاپيش معذرت ميخوام

shocraneh
یک شنبه 29 آذر 1388, 09:34 صبح
تشکر از توجهتان

shocraneh
یک شنبه 29 آذر 1388, 12:29 عصر
شرمنده خیلی وقتتون رو گرفتم
من زمانی که اعتبار سنجی در کار نیست به طور مستقیم تکس ها رو به تابع پاس می دم آیا در این گونه مواقع استفاده از کلاس item رو پیشنهاد می کنید یا نه ؟ سرعت رو پایین نمیاره ؟

یه سوال برام باقی مونده من دنبال این بودم که لیستی از آیتم ها رو برگردونم . شما این کارو روی بایند گرید انجام دادید . خوب چون گرید است از datasource استفاده کردید .

GridView.DataSource = BLL.Execute.Select
اما من می خام مثلا : 4 تا رکورد بر می گرده ، فیلد 2 همه این رکورد ها رو توی 4 تکس که روی صفحه ام گذاشتم بزنم . یعنی تک تک دسترسی داشته باشم .

salehbagheri
یک شنبه 29 آذر 1388, 14:31 عصر
اما من می خام مثلا : 4 تا رکورد بر می گرده ، فیلد 2 همه این رکورد ها رو توی 4 تکس که روی صفحه ام گذاشتم بزنم . یعنی تک تک دسترسی داشته باشم .

به اين صورت ايتم ها رو از ديتابيس بخونيد و از يك حلقه For به تك تك اونها دسترسي پيدا كنيد!



Dim Items As List(Of BLL.StringItem) = BLL.Execute.Select