TextBox と Button を持つ TemplateField を備えた拡張可能な GridView があります。ボタンを押すと、textBox の内容がデータベースに保存されます。現時点では、テスト中に問題が発生したため、TextBox のコンテンツをデータベースにロードできませんでした。
Ajax UpdatePanel 内に Gridview があり、Ajax UpdatePanel 内にも TemplateField 内に TexBox と Button があります。
問題は、トリガードロップダウンフィールドの変更からグリッドビューが更新されたときに、必要な結果を得るためにボタンを 2 回押す必要があることです (現時点では、行に ID を入力するだけです)。
別の投稿 (ボタン コントロールを 2 回クリックする必要があるのはなぜですか? ) に続いて、ネストされた UpdatePanel 内にすべての情報を含めるために最善を尽くしました。それでも私は問題を取り除くことができません。問題は、テキストを編集できるように TextBox コントロールを行で見つけようとしていることが原因であると推測していますが、FindControl を使用する必要を回避する方法がわかりません。
以下のコードを参照してください。
<script language="javascript" type="text/javascript">
function divexpandcollapse(divname) {var div = document.getElementById(divname);
var img = document.getElementById('img' + divname);
if (div.style.display == "none") {
div.style.display = "block"; img.src = "Images/Icons/minus.jpg";
} else { div.style.display = "none"; img.src = "Images/Icons/plus.jpg"; }
}</script>
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" ScriptMode="Release"
CompositeScript-ScriptMode="Release" AllowCustomErrorsRedirect="False" EnablePartialRendering="true">
</asp:ToolkitScriptManager>
<asp:UpdatePanel ID="UP_TabContainer" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="DateSelection" runat="server" AutoPostBack="True"> </asp:DropDownList>
<asp:GridView ID="GV_SL" runat="server" OnRowDataBound="gvUserInfo_RowDataBound"
OnRowCommand="GV_SL_RowCommand" AutoGenerateColumns="False" DataSourceID="SQL_Weekly">
<Columns>
<asp:TemplateField ItemStyle-Width="50px">
<ItemTemplate>
<a href="JavaScript:divexpandcollapse('div<%# Eval("reporting_group") %>');">
<img id="imgdiv<%# Eval("reporting_group") %>" width="15px" border="0" src="Images/Icons/plus.jpg" /></a>
</ItemTemplate>
<ItemStyle Width="40px" />
</asp:TemplateField>
<asp:BoundField DataField="name" HeaderText="Group" SortExpression="name" />
<asp:BoundField DataField="reporting_group" HeaderText="ID" ReadOnly="True" SortExpression="reporting_group" />
<asp:TemplateField>
<ItemTemplate>
<tr>
<td colspan="100%">
<div id="div<%# Eval("reporting_group") %>" style="display: none; position: relative;
left: 15px; overflow: auto">
<asp:GridView ID="gvChildGrid" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Metric" HeaderText=" " HeaderStyle-HorizontalAlign="Left" />
<asp:BoundField DataField="Actual" HeaderText="Actual" HeaderStyle-HorizontalAlign="Left" />
</Columns>
</asp:GridView>
<asp:UpdatePanel ID="UP_Comments" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:TextBox ID="TB_Comments" runat="server" Text="Example: Text will be entered here"></asp:TextBox>
<asp:Button ID="B_Save" runat="server" CommandName="AddText" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>"
Text="Save Changes" />
<asp:Label ID="Label1" runat="server" Text='<%# eval("reporting_group") %>' Visible="False"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</td>
</tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DateSelection" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
vb ボタンのコード ビハインド
Protected Sub GV_SL_RowCommand(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
If (e.CommandName = "AddText") Then
' Retrieve the row index stored in the CommandArgument property.
Dim index As Integer = Convert.ToInt32(e.CommandArgument)
' Retrieve the row that contains the button
' from the Rows collection.
Dim row As GridViewRow = GV_SL.Rows(index)
Dim LB_RG As System.Web.UI.WebControls.Label = DirectCast(row.FindControl("Label1"), System.Web.UI.WebControls.Label)
Dim TB_Com_Control As System.Web.UI.WebControls.TextBox = DirectCast(row.FindControl("TB_Comments"), System.Web.UI.WebControls.TextBox)
TB_Com_Control.Text = "Test " & "-" & LB_RG.Text
End If
End Sub
問題の場所と解決方法を特定するために誰かが助けてくれることを願っています。