WebSurfer's Home

""

GridView に配置した TextBox の ClientID

GridView に配置した TextBox のフォーカスが外れる際に Javascript でその TextBox の ClientID を表示します。

JavaScript を TextBox の onblur 属性に設定するのは GridView.RowDataBound イベントで行う必要があります。 RowCreated では、TextBox.ClientID に各行個別に ID が設定されません(すべて TextBox1 になります)。


IntegerValueStringValueCurrencyValueLabel & TextBox
0Item 01.23 Item 0
1Item 12.46 Item 1
2Item 23.69 Item 2
3Item 34.92 Item 3
4Item 46.15 Item 4
5Item 57.38 Item 5
6Item 68.61 Item 6
7Item 79.84 Item 7
8Item 811.07 Item 8

コードは以下のとおりです。

<%@ Page Language="C#" %> <%@ Import Namespace="System.Data" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected DataTable CreateDataTable() { DataTable dt = new DataTable(); DataRow dr; dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32))); dt.Columns.Add(new DataColumn("StringValue", typeof(string))); dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double))); for (int i = 0; i < 9; i++) { dr = dt.NewRow(); dr[0] = i; dr[1] = "Item " + i.ToString(); dr[2] = 1.23 * (i + 1); dt.Rows.Add(dr); } return dt; } void Page_Load(Object sender, EventArgs e) { if (!IsPostBack) { GridView1.DataSource = CreateDataTable(); GridView1.DataBind(); } } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { TextBox textbox = (TextBox)e.Row.Cells[3].FindControl("TextBox1"); Label label = (Label)e.Row.Cells[3].FindControl("Label1"); textbox.Attributes.Add("onblur", String.Format("javascript:confirm('LabelID: {0}, Label.Text: {1}, TextBoxID: {2}');", label.ClientID, label.Text, textbox.ClientID)); } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" onrowdatabound="GridView1_RowDataBound"> <Columns> <asp:BoundField DataField="IntegerValue" HeaderText="IntegerValue" /> <asp:BoundField DataField="StringValue" HeaderText="StringValue" /> <asp:BoundField DataField="CurrencyValue" HeaderText="CurrencyValue" /> <asp:TemplateField HeaderText="Label &amp; TextBox"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Eval("StringValue") %>'> </asp:Label> <asp:TextBox ID="TextBox1" runat="server" > </asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>