テンプレート フィールド内にボタンを持つ GridView があります。ボタンをクリックすると、データベースにクエリを実行し、動的に作成し、フィールド (テキスト ボックスと CuteEditor) を入力し、それらの「テキスト」プロパティを私の結果に設定します。クエリ。
その時点で、更新ボタンが動的に作成されます (私は onClientClick プロパティを関数 "Update Post" に設定しています)。したがって、ユーザーがこれらの入力フィールド内のコンテンツを変更すると、データベースを更新できます。
問題は、ユーザーが GridView TemplateField 内のボタンをクリックすると、関数「UpdatePost」がトリガーされるべきではないときにトリガーされることです。
UpdatePost が時期尚早にトリガーされる原因は何ですか?
OnClientClick を削除すると問題が解決します (関数が時期尚早にトリガーされることはありません)。
GridView テンプレート フィールド内のボタンの Click 関数によって OnClientClick がトリガーされているようです
Private Function UpdatePost()
'Find subject and Post Content
Dim myPh As PlaceHolder = plcEditor
Dim EditorContent As CuteEditor.Editor = plcEditor.FindControl("editEditor")
Dim editorSubject As TextBox = plcEditor.FindControl("editorSubject")
Dim hiddenID As HiddenField = plcEditor.FindControl("hiddenID")
Dim connStr As String = ConfigurationManager.ConnectionStrings("oakfratnewsConnectionString").ConnectionString
Dim nCon As New SqlConnection(connStr)
Dim addCon As New SqlConnection(connStr)
Dim addCom As New SqlCommand("UPDATE News SET Subject = @Subject, [Content] = @Content WHERE (ID = @ID)", addCon)
addCom.Parameters.AddWithValue("@Subject", editorSubject.Text)
addCom.Parameters.AddWithValue("@ID", hiddenID.Value)
addCom.Parameters.AddWithValue("@Content", Server.HtmlDecode(EditorContent.Text))
Try
addCon.Open()
addCom.ExecuteNonQuery()
addCon.Close()
Catch ex As Exception
End Try
Return True
End Function
Private Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
If e.CommandName = "editPost" Then
'Remove DataGrid'''''''''
GridView1.Visible = False
'''''''''''''''''''''''''
Dim index As Integer = Convert.ToInt32(e.CommandArgument)
Dim row As GridViewRow = GridView1.Rows(index)
Dim ID As String = GridView1.Rows(index).Cells(0).Text
''''''''''''''''''''''''''''''''''''''''CREATE Controls for Placeholder
Dim editEditor As New CuteEditor.Editor
Dim hiddenID As New HiddenField
hiddenID.ID = "hiddenID"
hiddenID.Value = ID
editEditor.ID = "editEditor"
Dim subjectTXT As New TextBox
subjectTXT.ID = "editorSubject"
Dim br As New Literal
Dim editButton As New Button
Dim sbjLabel As New Label
sbjLabel.Text = "Subject: "
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
editEditor.AutoConfigure = CuteEditor.AutoConfigure.Simple
br.Text = "<br/><br/>"
plcEditor.Controls.Add(hiddenID)
plcEditor.Controls.Add(sbjLabel)
plcEditor.Controls.Add(subjectTXT)
subjectTXT.Width = "100"
subjectTXT.Height = "25"
subjectTXT.CssClass = "editInput"
plcEditor.Controls.Add(br)
plcEditor.Controls.Add(editEditor)
plcEditor.Controls.Add(br)
plcEditor.Controls.Add(br)
plcEditor.Controls.Add(editButton)
editButton.Text = " Submit Changes "
editButton.Height = 40
editButton.Width = 300
editButton.OnClientClick = UpdatePost()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim connStr As String = ConfigurationManager.ConnectionStrings("oakfratnewsConnectionString").ConnectionString
Dim nCon As New SqlConnection(connStr)
Dim addCon As New SqlConnection(connStr)
Dim addCom As New SqlCommand("SELECT * FROM [News] WHERE ([ID] = @ID)", addCon)
addCom.Parameters.AddWithValue("@ID", ID)
Dim results As SqlDataReader
addCon.Open()
results = addCom.ExecuteReader
While results.Read()
Dim editText As String = results.Item("Content")
Dim Subject As String = results.Item("Subject")
editEditor.Text = editText
subjectTXT.Text = Subject
End While
addCon.Close()
End If
End Sub
グリッドビュー コード
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="3" DataKeyNames="ID" DataSourceID="SqlDataSource1"
Width="776px" BackColor="White" BorderColor="#D8D8D8" BorderStyle="None"
BorderWidth="1px">
<Columns>
<asp:BoundField ItemStyle-Width="30" DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField ItemStyle-Width="140" DataField="Subject" HeaderText="Subject"
SortExpression="Subject" />
<asp:BoundField DataField="Date" HeaderText="Date Published"
SortExpression="Date" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="grdEdit" height="70" Width="200" runat="server" CommandName="editPost" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>" Text="Edit Post" />
<asp:Button ID="Button2" height="70" Width="200" runat="server" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>" Text="Delete Post" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="White" ForeColor="Red" />
<HeaderStyle BackColor="Green" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#007DBB" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#00547E" />
</asp:GridView>