ModalPopupExtenderに配置したGridViewの選択行を取得したいと思っています。
下記コードはIE11では取得できたのですがFireFox バージョン60.0.1では動きませんでした。
ASPX
1Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);
がデバッグで入ってきません。
FireFoxの最新版では対応していないのでしょうか?
また、他の方法でGridViewの選択行を取得できるようでしたら教えて頂けないでしょうか。
コードは以下のようになります。
aspx
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="Test.Test" MaintainScrollPositionOnPostback="true"%> 2 3<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 4 5<!DOCTYPE html> 6 7<html xmlns="http://www.w3.org/1999/xhtml"> 8<head id="Head1" runat="server"> 9 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 11 <title>テスト</title> 12 13 <script type="text/javascript" src="scripts/Common.js"></script> 14 </head> 15<body> 16 <form id="form1" runat="server" defaultbutton="DummySubmitButton"> 17 <asp:ScriptManager ID="myScriptManager" runat="server"></asp:ScriptManager> 18 <asp:Button ID="DummySubmitButton" runat="server" Text="Button" OnClientClick="return false;" style="display:none" /> 19 <div> 20 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 21 <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="PUSH" /> 22 <asp:Panel ID="Panel1" runat="server"> 23 <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 24 <ContentTemplate> 25 <asp:Button ID="DummyButton" runat="server" Text="" Style="display:none" /> 26 <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" 27 TargetControlID="DummyButton" 28 PopupControlID="Panel1" 29 DropShadow="true" 30 BackgroundCssClass="modal"> 31 </ajaxToolkit:ModalPopupExtender> 32 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 33OnSelectedIndexChanged="GridView1_SelectedIndexChanged" 34 OnRowDataBound="GridView1_RowDataBound" AutoGenerateSelectButton="True" EnableTheming="True"> 35 <Columns> 36 <asp:BoundField DataField="Test" HeaderText="テスト" /> 37 </Columns> 38 </asp:GridView> 39 </ContentTemplate> 40 </asp:UpdatePanel> 41 </asp:Panel> 42 </div> 43 </form> 44</body> 45</html>
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.UI; 6using System.Web.UI.WebControls; 7using System.Data; 8using System.Data.OleDb; 9using System.Diagnostics; 10using Microsoft.VisualBasic.FileIO; 11using System.Text.RegularExpressions; 12 13namespace Test 14{ 15 public partial class Test: System.Web.UI.Page 16 { 17 protected void Page_Load(object sender, EventArgs e) 18 { 19 if (!IsPostBack) 20 { 21 DataTable dt = new DataTable(); 22 dt.Columns.Add("Test"); 23 dt.Rows.Add(new object[] { "1" }); 24 dt.Rows.Add(new object[] { "2" }); 25 dt.Rows.Add(new object[] { "3" }); 26 dt.Rows.Add(new object[] { "4" }); 27 GridView1.DataSource = dt; 28 GridView1.DataBind(); 29 } 30 } 31 32 protected void Button1_Click(object sender, EventArgs e) 33 { 34 UpdatePanel1.Update(); 35 ModalPopupExtender1.Show(); 36 if (GridView1.Rows.Count > 0) 37 { 38 GridView1.HeaderRow.TableSection = TableRowSection.TableHeader; 39 } 40 } 41 42 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 43 { 44 if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 45 { 46 ScriptManager.GetCurrent(this).RegisterDataItem(GridView1, GridView1.SelectedRow.Cells[1].Text); 47 } 48 ModalPopupExtender1.Hide(); 49 } 50 51 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 52 { 53 if (e.Row.RowType == DataControlRowType.Header) 54 { 55 // Hiding the Select Button Cell in Header Row. 56 e.Row.Cells[0].Style.Add(HtmlTextWriterStyle.Display, "none"); 57 } 58 59 if (e.Row.RowType == DataControlRowType.DataRow) 60 { 61 // Hiding the Select Button Cells showing for each Data Row. 62 e.Row.Cells[0].Style.Add(HtmlTextWriterStyle.Display, "none"); 63 64 // Attaching one onclick event for the entire row, so that it will 65 // fire SelectedIndexChanged, while we click anywhere on the row. 66 if (e.Row.Cells[1].Text != " ") 67 { 68 e.Row.Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(GridView1, "Select$" + e.Row.RowIndex)); 69 } 70 } 71 } 72 } 73}
JavaScript
1function pageLoad(sender, args) { 2 // 非同期通信 3 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded); 4} 5 6function pageLoaded(sender, args) { 7 var test = args.get_dataItems()["GridView1"]; 8 if (test ) { 9 document.getElementById("TextBox1").innerText = test ; 10 } 11}
すみません。開発環境等追記します。
サーバーOS:Windows Server 2012
クライアントOS:Windows7
.NET:4.0
サーバーIIS:6.28.0
クライアントIIS:10.0 Express
Visual Studio:2015 Community
~~不勉強で申し訳ございません。テンプレートは意味すら分かりません。~~テンプレート:空
Ajax Control Toolkit:(おそらく)18.1 こちらからダウンロード
2018/05/31追記
実現したいこととしてはAccessのシステムをASP.NETに移植するに当たり、複数列のコンボボックスを作成したいということです。
1.ボタンを押す
2.複数列コンボボックスに見立てたGridViewを表示(提示したコードは1列ですが実際は複数列)
3.GridViewから選択した行のセルの値をTextBoxに表示
(ModalPopupExtenderを使用したのはJavascriptのShowModalDialogはChromeで動かないとの記事がありましたので)
要はAccessのような複数列コンボボックスが作成したいと思っています。
回答1件
あなたの回答
tips
プレビュー