- PR -

GridViewのRowCreatedイベントについて

投稿者投稿内容
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2008-01-21 14:24
いつもお世話になります。現在ASP.NET2.0を使用して開発を行っております。
やりたいことは、GridViewのある列の内容を取得してメッセージを表示したいのですが、できません。具体的に困っているのは次の2点です。

  1. GridView1_RowCreatedイベントにClientIDを取得するプログラムを記述するとGridView1_SelectedIndexChangedイベントに入らなくなる。
  2. 選択した列の内容が警告ダイアログに表示されない

具体的なコードは次のようなものになります。よろしくご教授お願い致します。
コード:
'緯度を取得して、警告ダイアログを表示
Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
        '↓※A:この行を追加するとSelectedIndexChangedイベントが起きなくなります
        Dim latitudeID As String = e.Row.Cells(GridViewCol.Latitude).ClientID
        Dim button As Button = CType(e.Row.Cells(GridViewCol.EditButton).FindControl("btnEdit"), Button)
        button.Attributes.Add("onclick", "window.alert(document.getElementById('" & latitudeID & "').value)")
    End Sub
'グリッドビューが選択された場合
Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
    Dim dv As DataView
    dv = Me.SqlDataSource1.Select(DataSourceSelectArguments.Empty)
	'取得した内容をテキストボックスに表示する
    Me.lblFacilityId.Text = dv(0)("列1")
            :
      :
End Sub


出力されたHTMLはつぎのようなものになります。
※B:<td id="ctl00">の内容をwindow.alert(document.getElementById('ctl00').value)でダイアログを表示したいのですが、「undefined」になってしまいます。
コード:
<input type="submit" name="btnEdit" value="編集する" onclick="window.alert(document.getElementById('ctl00').value);" id="btnEdit" />
</td><td>
<input type="submit" name="Button1" value="削除する" onclick="return confirm('本当に削除しても良いですか?');" id="Button1" />
</td><td id="ctl00">1111111.2321</td><td>2222222.3241</td>



pitfall
会議室デビュー日: 2007/12/05
投稿数: 14
お住まい・勤務地: 東京都
投稿日時: 2008-01-21 14:43
window.alert(document.getElementById('ctl00').innerHTML)にするとどうなりますか?
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2008-01-21 15:10
pitfallさん返信ありがとうございます。
コード:
button.Attributes.Add("onclick", "window.alert(document.getElementById('" & latitudeID & "').innerHTML)")


にすることで2つの問題の内、

  1. GridView1_RowCreatedイベントにClientIDを取得するプログラムを記述するとGridView1_SelectedIndexChangedイベントに入らなくなる。
  2. 選択した列の内容が警告ダイアログに表示されない

Bの問題は解決することができました。本当にありがとうございます。
Aは何が原因なのでしょうか?未だに調査中です。よろしくご享受下さい。
pitfall
会議室デビュー日: 2007/12/05
投稿数: 14
お住まい・勤務地: 東京都
投稿日時: 2008-01-21 15:37
A.の「イベントに入らなくなる」とはイベント自体が起こらない、ブレイクポイントを設定してもブレイクされない、ということですか?

私の環境で簡単にソースを書いてみましたが再現しませんでした。
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2008-01-21 16:19
度々、返信ありがとうございます。その通りです。イベントが次の順番で行われますが、SelectedIndexChangedイベントに入りません。

1.編集するボタンを押す

2.window.alertが実行される。

3.GridView1_RowCreated

4.Page_Load

コード:
    Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
        '' データ行ではない場合は、何もしない
        If Not e.Row.RowType = DataControlRowType.DataRow Then
            Exit Sub
        End If
        'Dim latitudeID As String = e.Row.Cells(GridViewCol.Latitude).ClientID
        'Dim button As Button = CType(e.Row.Cells(GridViewCol.EditButton).FindControl("btnEdit"), Button)
        'button.Attributes.Add("onclick", "window.alert(document.getElementById('" & latitudeID & "').innerHTML)")
    End Sub


ただ上記のようにClientIDを取得している個所をコメントにすると
1.編集するボタンを押す

2.GridView1_RowCreated

3.Page_Load

4.GridView1_SelectedIndexChanged
とSelectedIndexChangedイベントに入るのですが、なぜこのような事になるのでしょうか?
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2008-01-21 16:21
申し訳ありません。ご質問に答えていないかもしれないので、追伸します。
イベント自体が起きません。ブレイクポイントを設定してもブレイクされません。
pitfall
会議室デビュー日: 2007/12/05
投稿数: 14
お住まい・勤務地: 東京都
投稿日時: 2008-01-21 17:50
すみませんが、aspxファイルのGridView1の部分のHTMLソースを記載していただけますか?
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2008-01-21 17:53
度々ありがとうございます。
HTMLソースは次のようになっております。
コード:
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333"
            GridLines="None" AllowPaging="True" AllowSorting="True" EmptyDataText="データが1件も登録されていません。" DataKeyNames="主キー">
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <EditRowStyle BackColor="#999999" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>
                <asp:BoundField DataField="運行路線系統ID" HeaderText="運行路線系統ID" />
                <asp:BoundField DataField="駅停留所ID" HeaderText="駅停留所ID" />
                <asp:BoundField DataField="運行路線系統名称" HeaderText="運行路線系統名称" />
                <asp:BoundField DataField="駅停留所名称" HeaderText="駅停留所名称" />
                <asp:BoundField DataField="時間" HeaderText="時間" />
                <asp:CommandField ButtonType="Button" SelectText="編集する" ShowSelectButton="True" />
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:Button ID="Button1" runat="server" CausesValidation="False" CommandName="Delete"
                            OnClientClick="return confirm('本当に削除しても良いですか?')" Text="削除する" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

スキルアップ/キャリアアップ(JOB@IT)