如何在ASP.NET中使用VB.NET刷新devexpress列表框而不刷新页面

toe95027  于 2023-02-17  发布在  .NET
关注(0)|答案(1)|浏览(140)

我正在设计一个表单,其中必须有一个上载控件和一个列表框来显示上载的文件。现在显示更改的唯一方法是刷新整个页面。我的老板希望上载文件自动显示在列表框中。经过几天的搜索,我一直找不到这样做的方法。

VB代码:

Protected Sub BootstrapUploadControl1_FileUploadComplete(sender As Object, e As DevExpress.Web.FileUploadCompleteEventArgs) Handles BootstrapUploadControl1.FileUploadComplete
    Dim fileName = e.UploadedFile.FileName
    Dim contentType = e.UploadedFile.ContentType
    Try
        Using fs As Stream = e.UploadedFile.FileContent
            Using br As New BinaryReader(fs)
                Dim bytes As Byte() = br.ReadBytes(CType(fs.Length, Integer))
                Dim constr As String = "Data Source=mgm-sql-pub101;Initial Catalog=KidVid;Integrated Security=True;"
                Dim query = "INSERT INTO Attachments(RequestID,FileName,FileBytes,Description) VALUES (@RequestID, @FileName, @FileBytes, @Description)"
                Using con As SqlConnection = New SqlConnection(constr)
                    Dim cmd As SqlCommand = New SqlCommand(query, con)
                    cmd.Parameters.AddWithValue("RequestID", 1)
                    cmd.Parameters.AddWithValue("FileName", fileName)
                    cmd.Parameters.AddWithValue("FileBytes", bytes)
                    cmd.Parameters.AddWithValue("Description", "Binary File")
                    Try
                        con.Open()
                        If con.State = ConnectionState.Open Then
                            MsgBox("It's open! Yay!")
                        End If
                        Dim obj As Object = cmd.ExecuteNonQuery()
                        MsgBox("Record inserted successfully. ID = " & obj.ToString())
                        con.Close()
                        If con.State = ConnectionState.Closed Then
                            MsgBox("It's closed! Yay!")
                        End If
                    Catch ex As Exception
                        Throw ex
                    End Try
                End Using
            End Using
        End Using
    Catch ex As Exception
        Throw New Exception(ex.Message)
    End Try
End Sub

超文本:

<div class="col">
                            <h5><i class='fas fa-paperclip' style='font-size:24px'></i>Attachments:</h5>
                            <div class="row mb-3">
                                <div class="col-5">
                                    <dx:BootstrapUploadControl ID="BootstrapUploadControl1" runat="server" AutoPostBack="true" UploadMode="Auto" ShowProgressPanel="True" ShowUploadButton="True"></dx:BootstrapUploadControl>
                                    <dx:ASPxButton ID="ASPxButton1" runat="server" Text="ASPxButton" AutoPostBack="true" />
                                </div>
                                
                            </div>
                            <h6><i class="fas fa-file-download" style="font-size: 24px"></i> Double-click filename to download file:</h6>
                            <dx:BootstrapListBox ID="AttachmentsListBox" runat="server" DataSourceID="KidVidAttachmentsDataSource" AutoPostBack="true">
                                <Fields>
                                    <dx:BootstrapListBoxField FieldName="FileName"></dx:BootstrapListBoxField>
                                </Fields>
                            </dx:BootstrapListBox>
                                <asp:SqlDataSource runat="server" ID="KidVidAttachmentsDataSource" ConnectionString="<%$ ConnectionStrings:KidVidConnectionString %>" SelectCommand="SELECT [FileName] FROM [Attachments] ORDER BY [FileName]"></asp:SqlDataSource>
ulydmbyx

ulydmbyx1#

所以,我不熟悉你正在使用的加载器,但是,你贴出的代码存根表明它的工作原理"很"像ajaxtoolkit。
这意味着在"所有"文件都被上载之后,不会发生回发。
如前所述,您可能需要一些允许上传文件的上传程序,并且不需要回发。
然而,在比如说4个文件完成上传之后,那么有一个回发触发器也不是那么糟糕,在那个时间点触发一个回发来刷新你的文件网格,或者列表框或者其他什么。
注意,你应该"找到"+"采用"一些上传程序来达到这个目的。一个数字"将"预览图片文件,甚至在上传开始之前。(然而,我真的对这个功能不感兴趣)。
所以,我使用Ajax工具包。它有3个事件(都不回发)。
启动负载短线。
一个文件上传完成存根。在这里我们保存文件,添加到我们的"文件列表"。在我下面的例子中,我用一个网格视图代替了一个列表框。
我有一些代码,如果这是一个PDF文件,我可以调出第一页来预览图像。对于图像,我只预览图像。
很多不错的上传程序也有一个"热点",你可以在其中拖放文件。
大多数是"分块"的,因此会显示一个进度条。被分块,那么文件大小是无限的,你不会得到一个巨大的浏览器"旋转器",而这样大的文件上传。
然而,一旦所有的文件都完成了,那么我做火灾客户端事件,我这样做,因为我需要/想更新我的上传文件列表。这就是"为什么"我问什么文件上传你正在使用。
你可以(我也可以用aj工具包文件上传器)做一个网络调用,获取新文件,然后填写列表框,但是,我使用的是网格视图,我只是做一个回发来刷新它。
结果如下所示:

那么,在每个文件上传的同时和之后?不,我不想回发。
然而,一旦文件列表被上传,我就会做一个回发来更新(刷新)网格视图。
所以,这在很大程度上取决于您使用的文件上传器。
如前所述,您的"代码存根"表明您的文件上传器具有此功能(完成后触发客户端javascript事件)。
因此,我所做的就是将一个按钮放到页面上,隐藏它(使用style = display none)。
而且aj文件加载器有一个"all done"客户端事件。
这是我的标价:
(not真的很重要,但作为一个fyi:)。

<div id="uploadfiles" runat="server" style="width: 550px; float: left">
    <ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" runat="server"
        OnUploadComplete="AjaxFileUpload1_UploadComplete"
        OnClientUploadCompleteAll="AllDone" />
</div>

<div id="myfiles" runat="server" style="float: left; width: 40%; margin-left: 30px">
    <asp:GridView ID="GridFiles" runat="server"
        AutoGenerateColumns="False" CssClass="table table-hover"
        OnRowDataBound="GridFiles_RowDataBound">
        <Columns>
            <asp:BoundField DataField="FileName" HeaderText="FileName" />
            <asp:BoundField DataField="UpLoadTime" HeaderText="UpLoaded" />
            <asp:BoundField DataField="Size" HeaderText="Size" />
            <asp:BoundField DataField="Pages" HeaderText="Pages" />
            <asp:TemplateField HeaderText="Preview">
                <ItemTemplate>
                    <asp:Image ID="Image1" runat="server" Width="120px" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Download" ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <button id="cmdDownLoad" runat="server" class="btn myshadow"
                        onserverclick="cmdDownLoad_Click">
                        <span aria-hidden="true" class="glyphicon glyphicon-cloud-download"></span>
                    </button>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Delete" ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <button id="cmdDelete" runat="server" class="btn myshadow"
                        onclick="if (!delok(this)) {return false};"
                        onserverclick="cmdDelete_ServerClick">
                        <span aria-hidden="true" class="glyphicon glyphicon-trash"></span>
                    </button>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <br />
</div>

并且我有这个javascript代码来刷新网格视图。

<asp:Button ID="cmdLoadGrid" runat="server" Text="Button"
        style="display:none" ClientIDMode="Static" OnClick="cmdLoadGrid_Click"
        />

    <script>

        function AllDone() {
            $('#cmdLoadGrid').click()

        }

所以,我实际上"点击"按钮后,一切都做了,因为aj文件加载不做回邮,我实际上想要一个!
和我的文件保存后,上传看起来相当相似,你有什么:
这个:

Protected Sub AjaxFileUpload1_UploadComplete(sender As Object,
                                             e As AjaxControlToolkit.AjaxFileUploadEventArgs)

    Dim sPath As String = Server.MapPath("~/UpLoadFiles/")
    Dim sFilePath As String = sPath & e.FileName

    AjaxFileUpload1.SaveAs(sFilePath)

    Dim strSQL As String =
        "INSERT INTO MyUploadFiles (FileName, UpLoadTime, Size, SavePath, Pages, Preview)
        Values (@FileName, @UpLoadTime, @Size, @SavePath, @Pages, @Preview)"

    Dim cmdSQL As New SqlCommand(strSQL)
    cmdSQL.Parameters.Add("@FileName", SqlDbType.NVarChar).Value = e.FileName
    cmdSQL.Parameters.Add("@UpLoadTime", SqlDbType.NVarChar).Value = DateTime.Now
    cmdSQL.Parameters.Add("@Size", SqlDbType.Int).Value = e.FileSize
    cmdSQL.Parameters.Add("@SavePath", SqlDbType.NVarChar).Value = sPath

    Dim iBytes() As Byte
    Dim PageCount As Integer = 0
    Select Case Path.GetExtension(e.FileName)
        Case ".pdf"
            iBytes = GetPdfThumb2(sFilePath, PageCount)
        Case ".zip"
            iBytes = GimageF(Server.MapPath("~/Content/Pictures/zip.png"))
        Case ".bmp", ".gif", ".jpeg", ".jpg", ".png"
            iBytes = GimageF(sFilePath)
        Case Else
            ' use generatic picture
            iBytes = GimageF(Server.MapPath("~/Content/Pictures/generic.png"))

    End Select

    cmdSQL.Parameters.Add("@Pages", SqlDbType.Int).Value = PageCount
    cmdSQL.Parameters.Add("@Preview", SqlDbType.Binary).Value = iBytes

    MyrstPN(cmdSQL)

End Sub

相关问题