Ultramoshi Moshi
Ultramoshi Moshi

Reputation: 11

Unable to cast object of type 'System.Web.UI.WebControls.Button' to type 'System.Web.UI.WebControls.DropDownList'

Error:

Unable to cast object of type 'System.Web.UI.WebControls.Button' to type 'System.Web.UI.WebControls.DropDownList'

Why?

<EditFormSettings EditFormType="Template">
    <FormTemplate>
    <asp:Label ID="Assign_t" runat="server" Font-Bold="True" ForeColor="#3366CC">Assign</asp:Label>

    <telerik:RadDropDownList ID="dd_Assign" runat="server" RenderMode="Lightweight" Skin="Bootstrap"  SelectedValue='<%#Bind("Assign_to") %>'>
           <Items>
              <telerik:DropDownListItem runat="server" Text="No Assign" Value="0" />
              <telerik:DropDownListItem runat="server" Text="name1" Value="[email protected]" />
              <telerik:DropDownListItem runat="server" Text="name2" Value="[email protected]" />
           </Items>
    </telerik:RadDropDownList>

    <asp:Button ID="btnUpdate" Text='<%# IIf((TypeOf (Container) Is GridEditFormInsertItem), "Insert", "Update") %>' OnClick = "SendMail"
                                        runat="server" CommandName='<%# IIf((TypeOf (Container) Is GridEditFormInsertItem), "PerformInsert", "Update")%>' ></asp:Button>
    <asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False"
                                            CommandName="Cancel"></asp:Button>
    </FormTemplate>
</EditFormSettings>
Protected Sub SendMail(ByVal sender As Object, ByVal e As EventArgs)

    Dim ddlSection As DropDownList = DirectCast(sender, DropDownList)
    Dim editItem As GridEditFormItem = DirectCast(ddlSection.NamingContainer, GridEditFormItem)
    Dim dd_Assign As DropDownList = DirectCast(editItem.FindControl("dd_Assign"), DropDownList)

    Dim strFrom As String = "[email protected]" 
    Dim strCC As String = dd_Assign.SelectedItem.ToString
    Dim strBCC As String = "[email protected]" 'BCC
    Dim strSubject As String = "Request JOB Verification Approval" 
    Dim strBody As String = "test"
    Dim mailMessage As New System.Net.Mail.MailMessage(strFrom, strCC, strSubject, strBody)
    Dim mailClient As New System.Net.Mail.SmtpClient("xx.xx.xx.xx", 25)
    mailClient.Credentials = New System.Net.NetworkCredential("[email protected]", "pass") 
    mailClient.DeliveryMethod = Net.Mail.SmtpDeliveryMethod.Network
    mailClient.UseDefaultCredentials = True
    mailClient.Send(mailMessage)

End Sub

Upvotes: 1

Views: 692

Answers (1)

Tetsuya Yamamoto
Tetsuya Yamamoto

Reputation: 24957

The error message is pretty straightforward: an attempt to cast a Button control to DropDownList has occurred & throwing InvalidCastException.

One of the button control has OnClick event handler which bound to SendMail method:

<asp:Button ID="btnUpdate" Text='<%# IIf((TypeOf (Container) Is GridEditFormInsertItem), "Insert", "Update") %>' 
            OnClick="SendMail"
            runat="server" CommandName='<%# IIf((TypeOf (Container) Is GridEditFormInsertItem), "PerformInsert", "Update")%>'>
</asp:Button>

But inside SendMail method attempts to cast into DropDownList are exist:

' first cast
Dim ddlSection As DropDownList = DirectCast(sender, DropDownList)

' second cast
Dim dd_Assign As DropDownList = DirectCast(editItem.FindControl("dd_Assign"), DropDownList)

Note that the sender argument contains control object that the event action is bound for, hence you need to bind the event handler into proper control. You can try casting it to Button to prove it:

Dim button As Button = DirectCast(sender, Button)

Since EditFormSettings with Template edit mode was used, I think you're using RadGrid here, so you can utilize ItemUpdated event instead of standard button event handler as given in this example.

Protected Sub RadGrid1_ItemUpdated(ByVal source As Object, ByVal e As Telerik.Web.UI.GridUpdatedEventArgs) Handles RadGrid1.ItemUpdated
    If e.Exception Is Nothing Then
       ' email sending code here
    Else
       ' throw exception
    End If
End If

Upvotes: 2

Related Questions