title: How do I resolve "Unable to cast object of type 'ASP.addtoroster_aspx' to type 'System.Web.UI.WebControls.GridViewRow' error?
body: <p>We have a dropdownlist in gridview that gets populated from the database.</p>
  
  <p>There is a also a textbox next to this dropdownlist.</p>
  
  <p>If the option the user is looking for isn't in the dropdown, enter that value into the textbox and when submitted to the database, will now become in the dropdownlist.</p>
  
  <p>I am running into the following error:</p>
  
  <pre><code>Unable to cast object of type 'ASP.addtoroster_aspx' to type 'System.Web.UI.WebControls.GridViewRow'.
  </code></pre>
  
  <p>The error is on this line:</p>
  
  <p><code>Dim parentRow As GridViewRow = DirectCast(button.NamingContainer, GridViewRow</code>)</p>
  
  <p>I believe this error occurs because I am using an imagebutton on the markup to submit to the database.</p>
  
  <pre><code>&lt;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" /&gt; 
  </code></pre>
  
  <p>Any idea how to resolve this?</p>
  
  <p>Even though this is vb, I welcome solution in c# if available.</p>
  
  <p>Thank you!</p>
  
  <pre><code>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} &lt;br/&gt;", 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 = " &amp; 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 &gt; 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 += "('" &amp; txLName &amp; "', '" &amp; txName &amp; "', '" &amp; txEmail &amp; "', '" &amp; txRole &amp; "', '" &amp; txPhone &amp; "', '" &amp; ddlvalue &amp; "','" &amp; txVIP &amp; "','" &amp; dateentered &amp; "', '" &amp; drpLCB &amp; "')"
                      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
  </code></pre>