PDA

View Full Version : مشکل کدم و راه حل اون ؟



peymannaji
جمعه 04 مرداد 1387, 20:30 عصر
با سلام ...
میخواستم بدونم مشکل کدم چی هست . با ارور Object reference not set to an instance of an object. مواجه میشم ....




Imports System.Data

Partial Class Default2
Inherits System.Web.UI.Page
Dim employee As DataTable

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Not IsPostBack Then

GetDataTable()
End If

End Sub


Private Function GetDataTable() As DataTable

employee = New DataTable("Employee")
'Add the DataColumn using all properties
Dim eid As New DataColumn("Eid")
eid.DataType = GetType(String)
eid.MaxLength = 10
eid.Unique = True
eid.AllowDBNull = False
eid.Caption = "EID"
employee.Columns.Add(eid)

'Add the DataColumn using defaults
Dim firstName As New DataColumn("FirstName")
firstName.MaxLength = 35
firstName.AllowDBNull = False
employee.Columns.Add(firstName)
Dim lastName As New DataColumn("LastName")
lastName.AllowDBNull = False
employee.Columns.Add(lastName)

'Add the decimal DataColumn using defaults
Dim salary As New DataColumn("Salary", GetType(Decimal))
salary.DefaultValue = 0.0
employee.Columns.Add(salary)

employee.PrimaryKey = New DataColumn() {eid}

Return employee

End Function


Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim newemployee As DataRow
newemployee = employee.NewRow()

newemployee("eid") = ""
newemployee("FirstName") = "Nancy"
newemployee("LastName") = "Davolio"
newemployee("Salary") = 10.0
employee.Rows.Add(newemployee)

End Sub
End Class

Modifier
شنبه 05 مرداد 1387, 02:11 صبح
سلام علیکم

این خطا خیلی وقتها پیش میاد

حدالقل میگفتی کدوم خط رو خطا میگیره ! اینطوری که نشد !

ببین یه کمک کلی »» یه چیزی درست مقدار دهی نشده یا اصلا مقدار دهی نشده یا اون طوری که باید نیست

موفق باشید.

یا علی

peymannaji
شنبه 05 مرداد 1387, 17:07 عصر
خطا مربوط میشه به رویداد کلیک Button / خط دوم ...



newemployee = employee.NewRow()



اما حالا بنظرتون کدم رو به چه شکل در بیارم که مشکل حل بشه ؟ البته اگه کل کدها رو در یک رویداد بنویسم مشکلی نداره اما من میخوام همه چیز بصورت مجزا باشه ...

peymannaji
یک شنبه 06 مرداد 1387, 17:51 عصر
دوستان کسی هست کمک کنه خیلی نیاز فوری دارم ...

با تشکر

Modifier
دوشنبه 07 مرداد 1387, 03:36 صبح
سلام علیکم
اول شرمنده که زودتر نشد پاسخ بدم !

ببین دوست قبلا هم گفتم مشکل اینه که یه چیزی درست مقدار دهی نشده یا اصلا نشده !

حالا باید دید چطور این مشکل بوجود اومده :

در نگاه اول مشکلی نداره (کد شما) ...
ولی با توجه به یکسری مباحث شئ گرایی متوجه میشی که در کد زیر :

newemployee = employee.NewRow()

employee مقدار دهی اولیه نشده یا بهتر بگم object از اون وجود نداره چه برسه به این که مقدار دهی بشه.

شما با توجه به کد زیر اون رو ساختید :

employee = New DataTable("Employee")
'Add the DataColumn using all properties
Dim eid As New DataColumn("Eid")
eid.DataType = GetType(String)
eid.MaxLength = 10
eid.Unique = True
eid.AllowDBNull = False
eid.Caption = "EID"
employee.Columns.Add(eid)


ولی در مباحث شئ گرایی هست که object ساخته شده در یک متد تا پایان عمر آن متد موجود است و متد که تموم شد شئ از بین میره.

پس در رویداد :

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

برای employee شئ وجود نداره و خطای کامپایل نمیگیره چون شما قبلا employee را به عنوان متغیر عضو معرفی کرده اید ولی بدلایلی که ذکر شد با این مشکل مواجه هستید.

پس اگر میخواهید از توابع جدا استفاده کنید یکسری به MSDN بزنید. تا ببینید چطور کار کرده :



Private Sub CreateNewDataRow()
' Use the MakeTable function below to create a new table.
Dim table As DataTable
table = MakeNamesTable()
' Once a table has been created, use the
' NewRow to create a DataRow.
Dim row As DataRow
row = table.NewRow()
' Then add the new row to the collection.
row("fName") = "John"
row("lName") = "Smith"
table.Rows.Add(row)
Dim column As DataColumn
For Each column in table.Columns
Console.WriteLine(column.ColumnName)
Next
DataGrid1.DataSource=table
End Sub
Private Function MakeNamesTable() As DataTable
' Create a new DataTable titled 'Names.'
Dim namesTable As DataTable = new DataTable("Names")
' Add three column objects to the table.
Dim idColumn As DataColumn = new DataColumn()
idColumn.DataType = System.Type.GetType("System.Int32")
idColumn.ColumnName = "id"
idColumn.AutoIncrement = True
namesTable.Columns.Add(idColumn)
Dim fNameColumn As DataColumn = New DataColumn()
fNameColumn.DataType = System.Type.GetType("System.String")
fNameColumn.ColumnName = "Fname"
fNameColumn.DefaultValue = "Fname"
namesTable.Columns.Add(fNameColumn)
Dim lNameColumn As DataColumn = new DataColumn()
lNameColumn.DataType = System.Type.GetType("System.String")
lNameColumn.ColumnName = "LName"
namesTable.Columns.Add(lNameColumn)
' Create an array for DataColumn objects.
Dim keys(0) As DataColumn
keys(0) = idColumn
namesTable.PrimaryKey = keys
' Return the new DataTable.
MakeNamesTable = namesTable
End Function


موفق باشید.

یا علی.

peymannaji
دوشنبه 07 مرداد 1387, 20:14 عصر
ممنون دوست عزیز از لطفتون . کدی که دادید رو بررسی میکنم ... اگر سوالی داشتم میپرسم ...

موفق وباشید ...