Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click Dim i As Integer
Dim j As Integer '打开数据库,往数据库中写如调研的基本信息
Dim sqlconn As SqlConnection
Dim sqlconnstr As String
Dim sqlcom As SqlCommand
Dim sqlreader As SqlDataReader sqlconnstr = "server=localhost;uid=sa;pwd=;database=Online_Research"
sqlconn = New SqlConnection(sqlconnstr)
sqlconn.Open()
sqlcom = New SqlCommand
sqlcom.Connection = sqlconn
sqlcom.CommandText = "Insert Into Research (Name,Content,TextBox_Count,CheckBox_Count,MultiBox_Count,TextArea_Count,Start_Time,End_Time) Values('" & ResearchName.Text & "','" & ResearchContent.Text & "'," & TextBox3.Text & "," & TextBox4.Text & "," & Textbox1.Text & "," & TextBox5.Text & "," & TextBox6.Text & "," & TextBox7.Text & ")"
sqlcom.ExecuteNonQuery()
sqlcom = Nothing '读出刚才设置的在线调研的ID
sqlcom = New SqlCommand
sqlcom.Connection = sqlconn
sqlcom.CommandText = "Select Top 1 Research_ID From Research Where Name='" & ResearchName.Text & "' Order By Design_Time Desc "
sqlreader = sqlcom.ExecuteReader
While sqlreader.Read
j = sqlreader.GetInt32("0")
End While
sqlcom = Nothing
sqlreader.Close() '打开数据库,写入每一个调研题目,遍历页面中的用户控件
Dim sqlComBulid As SqlCommandBuilder
Dim ds As New DataSet
Dim sqlda As SqlDataAdapter
sqlda = New SqlDataAdapter("Select * From Question", sqlconn)
sqlComBulid = New SqlCommandBuilder(sqlda)
sqlda.Fill(ds, "Research_Questions") Dim drow As DataRow
Dim UserControl As Control For i = 0 To TextBox3.Text + TextBox4.Text + TextBox5.Text + Textbox1.Text - 1
drow = ds.Tables("Research_Questions").NewRow()
UserControl = Page.FindControl("Question" & i + 1) drow(1) = j
Dim label1 As Label
Dim label2 As Label
Dim textbox1 As TextBox
Dim textbox2 As TextBox
label1 = UserControl.FindControl("QuestionID")
label2 = UserControl.FindControl("QuestionType")
textbox1 = UserControl.FindControl("QuestionName")
textbox2 = UserControl.FindControl("QuestionContent")
drow(2) = label1.Text
drow(3) = label2.Text
drow(4) = textbox1.Text
drow(5) = textbox2.Text
ds.Tables("Research_Questions").Rows.Add(drow)
ds.Tables("Research_Questions").AcceptChanges()
Next
sqlda.Update(ds, "Research_Questions") sqlconn.Close()
sqlconn = Nothing End Sub以上代码好像没有什么问题,但是运行的时候却说:“/Research”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 212: Dim textbox1 As TextBox
行 213: Dim textbox2 As TextBox
行 214: label1 = UserControl.FindControl("QuestionID") /*调试时说这一行有错*/
行 215: label2 = UserControl.FindControl("QuestionType")
行 216: textbox1 = UserControl.FindControl("QuestionName")
这个问题已经困扰了我快一周了,高手们,热心人们,请帮一把!谢谢!
Dim j As Integer '打开数据库,往数据库中写如调研的基本信息
Dim sqlconn As SqlConnection
Dim sqlconnstr As String
Dim sqlcom As SqlCommand
Dim sqlreader As SqlDataReader sqlconnstr = "server=localhost;uid=sa;pwd=;database=Online_Research"
sqlconn = New SqlConnection(sqlconnstr)
sqlconn.Open()
sqlcom = New SqlCommand
sqlcom.Connection = sqlconn
sqlcom.CommandText = "Insert Into Research (Name,Content,TextBox_Count,CheckBox_Count,MultiBox_Count,TextArea_Count,Start_Time,End_Time) Values('" & ResearchName.Text & "','" & ResearchContent.Text & "'," & TextBox3.Text & "," & TextBox4.Text & "," & Textbox1.Text & "," & TextBox5.Text & "," & TextBox6.Text & "," & TextBox7.Text & ")"
sqlcom.ExecuteNonQuery()
sqlcom = Nothing '读出刚才设置的在线调研的ID
sqlcom = New SqlCommand
sqlcom.Connection = sqlconn
sqlcom.CommandText = "Select Top 1 Research_ID From Research Where Name='" & ResearchName.Text & "' Order By Design_Time Desc "
sqlreader = sqlcom.ExecuteReader
While sqlreader.Read
j = sqlreader.GetInt32("0")
End While
sqlcom = Nothing
sqlreader.Close() '打开数据库,写入每一个调研题目,遍历页面中的用户控件
Dim sqlComBulid As SqlCommandBuilder
Dim ds As New DataSet
Dim sqlda As SqlDataAdapter
sqlda = New SqlDataAdapter("Select * From Question", sqlconn)
sqlComBulid = New SqlCommandBuilder(sqlda)
sqlda.Fill(ds, "Research_Questions") Dim drow As DataRow
Dim UserControl As Control For i = 0 To TextBox3.Text + TextBox4.Text + TextBox5.Text + Textbox1.Text - 1
drow = ds.Tables("Research_Questions").NewRow()
UserControl = Page.FindControl("Question" & i + 1) drow(1) = j
Dim label1 As Label
Dim label2 As Label
Dim textbox1 As TextBox
Dim textbox2 As TextBox
label1 = UserControl.FindControl("QuestionID")
label2 = UserControl.FindControl("QuestionType")
textbox1 = UserControl.FindControl("QuestionName")
textbox2 = UserControl.FindControl("QuestionContent")
drow(2) = label1.Text
drow(3) = label2.Text
drow(4) = textbox1.Text
drow(5) = textbox2.Text
ds.Tables("Research_Questions").Rows.Add(drow)
ds.Tables("Research_Questions").AcceptChanges()
Next
sqlda.Update(ds, "Research_Questions") sqlconn.Close()
sqlconn = Nothing End Sub以上代码好像没有什么问题,但是运行的时候却说:“/Research”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 212: Dim textbox1 As TextBox
行 213: Dim textbox2 As TextBox
行 214: label1 = UserControl.FindControl("QuestionID") /*调试时说这一行有错*/
行 215: label2 = UserControl.FindControl("QuestionType")
行 216: textbox1 = UserControl.FindControl("QuestionName")
这个问题已经困扰了我快一周了,高手们,热心人们,请帮一把!谢谢!
如果是usercontrol,那么对于定义在usercontrol
里的控件对于其他的form来说都是不可见得,也就是说UserControl.FindControl("QuestionType")找不到的。你可以用其他的方法实现,将你的userconrol里的控件text赋值给公用变量,然后用公用变量处理,至少你加一个module,在里面定义public变量是可以的
webform1:QuestionID,因为同样的用户控件你可以放置好几个,所以,你再用
UserControl.FindControl("QuestionID") 查找,肯定找不到
Public Property label1() As String
Get
Return label1.text
End Get
Set(ByVal Value As String)
label1.text= Value
End Set
End Property
在UserControl内没有找到id为QuestionID的控件的时候 label1就是null
下面用一个为null的控件的text属性 当然就出现NullReferenceException异常了
一般应该在findcontrol后判断一下是否为null在使用它你的UserControl内没有找到id为QuestionID的控件 建议你仔细看一下你的页面结构看看 QuestionID是不是直接在userControl内的?
UserControl = Page.FindControl("Question" & i + 1)
应该是没有找到UserControl
UserControl = Page.FindControl("Question" & i + 1)
应该是没有找到UserControl
谢谢您的提醒!调试时确实没有找到,原来在加载的时是这样子的:
'动态生成各类型题的具体设置
For i = 0 To TextBoxCount + CheckBoxCount + TextAreaCount + MultiBoxCount - 1
Dim myUserControl As Control
Dim QuestionID As Label
Dim QuestionName As TextBox
Dim QuestionType As Label
Dim QuestionContent As TextBox '每一个题都加载Control_Template.ascx模板,生成每个模板的相应属性,多数为其Text属性
'QuestionID存放问题的序号
'QuestionName存放问题的名称
'QuestionContent存放问题的内容
'QuestionType存放问题的类型
'DropDownList1存放是单选还是多选的下拉列表,如果是文本框或者文本域,则此项不显示
myUserControl = Page.LoadControl("Control_Template.ascx")
myUserControl.ID = "Question" & i + 1
QuestionID = myUserControl.FindControl("QuestionID")
QuestionName = myUserControl.FindControl("QuestionName")
QuestionType = myUserControl.FindControl("QuestionType")
QuestionContent = myUserControl.FindControl("QuestionContent") QuestionID.Text = i + 1
QuestionName.Text = "这里填写题干的内容!"请问:该怎样才能找到这些动态加载的控件呢?(因为现在想遍历加载的控件,取得其某些属性,比方说里面的TextBox,Label的Text)
在调试的时候发现:
UserControl = Page.FindControl("Question" & i + 1)
结果:
Usercontrol=Nothing
没有找到UserControl。非常谢谢!