我们在 gridview 中有一个从数据库中填充的下拉列表。
此下拉列表旁边还有一个文本框。
如果用户正在寻找的选项不在下拉列表中,则将该值输入到文本框中,当提交到数据库时,现在将在下拉列表中。
我遇到以下错误:
Unable to cast object of type 'ASP.addtoroster_aspx' to type 'System.Web.UI.WebControls.GridViewRow'.
错误在这一行:
Dim parentRow As GridViewRow = DirectCast(button.NamingContainer, GridViewRow
)
我相信会发生此错误,因为我在标记上使用图像按钮提交到数据库。
<asp:ImageButton ID="btnSave" runat="server" ImageUrl="images/save.png"
onmouseout="this.src='images/save.png'"
onmouseover="this.src='images/save.png'"
OnClick="btnSave_Click" alt="Save Data" />
知道如何解决这个问题吗?
即使这是 vb,我也欢迎使用 c# 中的解决方案(如果有)。
谢谢!
Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As EventArgs)
' Try
SetRowData()
Dim table As DataTable = TryCast(ViewState("CurrentTable"), DataTable)
If table IsNot Nothing Then
For Each row As DataRow In table.Rows
Dim txLName As String = TryCast(row.ItemArray(1), String)
Dim txName As String = TryCast(row.ItemArray(2), String)
Dim txEmail As String = TryCast(row.ItemArray(3), String)
Dim txRole As String = TryCast(row.ItemArray(4), String)
Dim txPhone As String = TryCast(row.ItemArray(5), String)
Dim drpEmpl As String = TryCast(row.ItemArray(6), String)
Dim txVIP As String = TryCast(row.ItemArray(7), String)
Dim drpLCB As String = TryCast(row.ItemArray(8), String)
'Find the button
Dim button As Button = DirectCast(sender, Button)
'Find parent row
Dim parentRow As GridViewRow = DirectCast(button.NamingContainer, GridViewRow)
'find DropDownlist and textbox
Dim ddl As DropDownList = TryCast(parentRow.FindControl("txtLoginName"), DropDownList)
Dim txtNewUser As TextBox = TryCast(parentRow.FindControl("txtNewUser"), TextBox)
If txtNewUser IsNot Nothing AndAlso ddl IsNot Nothing Then
'add new listitem here
Dim customItem As New ListItem(txtNewUser.Text, txtNewUser.Text)
ddl.Items.Add(customItem)
End If
Dim ddlvalue As String = ""
Dim idx As Integer = grvStudentDetails.EditIndex
If drpEmpl = "Other" Then
ddlvalue = DirectCast(grvStudentDetails.FindControl("txtOther"), TextBox).Text
' Else
' ddlvalue = drpEmpl
End If
If txLName IsNot Nothing OrElse txLName IsNot Nothing OrElse txEmail IsNot Nothing OrElse txRole IsNot Nothing OrElse txPhone IsNot Nothing OrElse drpEmpl IsNot Nothing OrElse txVIP IsNot Nothing OrElse drpLCB IsNot Nothing Then
' Response.Write(String.Format("{0} {1} {2} {3} {4} {5} {6} {7} <br/>", txLName, txName, txEmail, txRole, txPhone, drpEmpl, txVIP, drpLCB))
'Try
Dim dateentered As String = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss")
'Response.Write(dateentered)
'Response.End()
Dim s As String
Dim count As Integer
'If LoginName already exists, alert user
s = "SELECT Count(*) FROM Employee_Roster WHERE login_id = " & txLName
'Response.Write(s)
'Response.End()
Dim connSt As String = ConfigurationManager.ConnectionStrings("allstringconstrng").ConnectionString
Dim connc As New OleDbConnection(connSt)
Dim cmdc As New OleDbCommand(s, connc)
'cmdc.Parameters.AddWithValue("login_id", txtLoginName.SelectedValue)
connc.Open()
' cmdc.ExecuteNonQuery()
count = cmdc.ExecuteScalar()
' Now let's see if we found existing record
If count > 0 Then
'Display some feedback to the user to let them know it was processed
lblResult.ForeColor = System.Drawing.Color.Green
lblResult.Text = "User already is in the Excel Sheet!"
Else
s = "INSERT INTO Employee_Roster(login_id, FullName, Email_Address, Role_Dept,Phone,Employer,VP,entryDate,Notes) VALUES "
s += "('" & txLName & "', '" & txName & "', '" & txEmail & "', '" & txRole & "', '" & txPhone & "', '" & ddlvalue & "','" & txVIP & "','" & dateentered & "', '" & drpLCB & "')"
Response.Write(s)
Response.End()
Dim connStr As String = ConfigurationManager.ConnectionStrings("allstringconstrng").ConnectionString
Dim conn As New OleDbConnection(connStr)
Dim cmd As New OleDbCommand(s, conn)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
'Display some feedback to the user to let them know it was processed
lblResult.ForeColor = System.Drawing.Color.Green
lblResult.Text = "Record successfully saved!"
'Clear the form
txLName = ""
txLName = ""
txEmail = ""
txRole = ""
txPhone = ""
txVIP = ""
End If
' Catch
'If the message failed at some point, let the user know
lblResult.ForeColor = System.Drawing.Color.Red
lblResult.Text = "Your record failed to save, please try again."
' End Try
End If
Next
End If
' Catch ex As Exception
'Throw New Exception(ex.Message)
' End Try
End Sub