アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、ASP.NET(VB)にて開発を行っています。今悩んでいる事は GridView内でUpdatePanelを使用した際にエラーが表示されます。
エラー内容は下記の通りです。

InvalidCastException はユーザーコードによってハンドルされませんでした。
______________________________________________________________________
型 'System.Web.UI.UpdatePanel' のオブジェクト型
'System.Web.UI.WebControl.GridViewRow' にキャストできません。

どなたか、エラーの対処方をご存知の方がいらっしゃいましたらご指導宜しくお願いします。なお、ソースは下記の様に記述してみました。

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …

<script runat="server">

Protected Sub TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Dim txt As TextBox = DirectCast(sender, TextBox)
Dim row As GridViewRow = DirectCast(txt.Parent.Parent, GridViewRow)
CD.Text = txt.Text
End Sub

</script>

<html>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="SM" runat="server">
</asp:ScriptManager>
<asp:TextBox ID="CD" runat="server" Width="50px"></asp:TextBox>

<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" DataKeyNames="CD" DataSourceID="Source" ShowFooter="True">
<Columns>
<asp:TemplateField HeaderText="CD">
<ItemTemplate>
<asp:Label ID="lbl" runat="server" Text='<%# Bind("CD") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:UpdatePanel ID="UP" runat="server">
<ContentTemplate>
<asp:TextBox ID="NewCD" runat="server" AutoPostBack="True"
OnTextChanged="TextChanged" Width="50px"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

<asp:SqlDataSource ID="Source" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionStrings %>"
SelectCommand="SELECT * FROM [TABLE]"
ProviderName="System.Data.SqlClient">
</asp:SqlDataSource>
</form>
</body>
</html>

A 回答 (1件)

Dim row As GridViewRow = DirectCast(txt.Parent.Parent, GridViewRow)


CD.Text = txt.Text
ここを、TryCastを使ってみてください。
Dim row As GridViewRow = TryCast(txt.Parent.Parent, GridViewRow)
If row Is Nothing Then
Retrun
End If
CD.Text = txt.Text

という感じの処理にでも。
TryCastはキャストできない場合はNothingを返しますので、戻り値を確認すればキャスト出来たか確認できます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!