Вопрос

I would like to update UpdatePanel1 after executing the code in Button1_Click.

UpdatePanel1.Update() is not updating GridView1.

The trigger in UpdatePanel1, I think, is firing immediately after Button1 is pushed instead of after executing the code in the pushbutton event.

I would like to refresh GridView1 in UpdatePanel1 after first executing the code in Button1_Click.

Default.aspx.vb

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click
    Dim connStr As String = "connection string works"
    Dim cmdStr As String = "INSERT INTO [test] ([datetime],[col1],[col2],[col3]) VALUES (@datetime,@col1,@col2,@col3);"
    Try
        Using conn As New SqlConnection(connStr)
            Using cmd As New SqlCommand(cmdStr, conn)
                conn.Open()
                cmd.Parameters.AddWithValue("@datetime", DateTime.Now)
                cmd.Parameters.AddWithValue("@col1", TextBox1.Text)
                cmd.Parameters.AddWithValue("@col2", TextBox2.Text)
                cmd.Parameters.AddWithValue("@col3", TextBox3.Text)
                cmd.ExecuteNonQuery()
                conn.Close()
                cmd.Dispose()
                conn.Dispose()
            End Using
        End Using
    Catch ex As Exception

    End Try
    UpdatePanel1.Update()
End Sub

Default.aspx

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click"></asp:AsyncPostBackTrigger>
    </Triggers>
    <ContentTemplate>
        <center><table><tr><td align="center">
                <asp:Label ID="Label4" runat="server" Text="Column 1"></asp:Label></td><td align="center">
                <asp:Label ID="Label5" runat="server" Text="Column 2"></asp:Label></td><td align="center">
                <asp:Label ID="Label6" runat="server" Text="Column 3"></asp:Label><br /></td></tr><tr><td align="center">
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td><td align="center">
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td><td align="center">
                <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /></td></tr><tr><td colspan="3" align="center">
                <asp:Button ID="Button1" runat="server" Text="Insert Into Gridview" /></td></tr><tr><td><br />
                <asp:GridView ID="GridView1" 
                    DataSourceID="SqlDataSource1"
                    AutoGenerateColumns="true"
                    AllowPaging="true"
                    PageSize="50" 
                    AllowSorting="true"
                    DataKeyNames="idt"
                    AutoGenerateEditButton="true" 
                    AutoGenerateDeleteButton="true"
                    runat="server">
                </asp:GridView>
                <asp:SqlDataSource 
                    ID="SqlDataSource1"
                    ConnectionString="<%$ ConnectionStrings:connone %>"
                    SelectCommand="SELECT * FROM [test];"
                    DataSourceMode="DataSet"
                    UpdateCommand="UPDATE test [datetime],[col1],[col2],[col3] SET @datetime, @col1, @col2, @col3;"
                    DeleteCommand="DELETE FROM [test] WHERE [idt]=@idt;"
                    runat="server">
                </asp:SqlDataSource>
        </td></tr></table></center>
    </ContentTemplate>
</asp:UpdatePanel>
Это было полезно?

Решение

You don't need to call UpdatePanel1.Update() in your Button1_Click method since Button1 is a trigger for your UpdatePanel. Instead you must call GridView1.DataBind() to refetch data from DB, like this :

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click
Dim connStr As String = "connection string works"
Dim cmdStr As String = "INSERT INTO [test] ([datetime],[col1],[col2],[col3]) VALUES (@datetime,@col1,@col2,@col3);"
Try
    Using conn As New SqlConnection(connStr)
        Using cmd As New SqlCommand(cmdStr, conn)
            conn.Open()
            cmd.Parameters.AddWithValue("@datetime", DateTime.Now)
            cmd.Parameters.AddWithValue("@col1", TextBox1.Text)
            cmd.Parameters.AddWithValue("@col2", TextBox2.Text)
            cmd.Parameters.AddWithValue("@col3", TextBox3.Text)
            cmd.ExecuteNonQuery()
            conn.Close()
            cmd.Dispose()
            conn.Dispose()
        End Using
    End Using
    Catch ex As Exception

End Try
GridView1.Databind()
End Sub
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top