1

別のフレームワークを使用しているため、.NET GridView を使用できません。別のコレクション タイプと特殊なグリッドがあります (.NET コントロールから継承されません)。Web から MS-Excel にデータをエクスポートする必要があります。これがコードです。

   Me.Response.Clear()
   Me.Response.ContentEncoding = System.Text.Encoding.GetEncoding(1254)
   Me.Response.AddHeader("Content-Disposition", "Attachment;filename=Calls.xls")
   Me.Response.AddHeader("Content-type", "application/ms-excel")
            For n As Integer = 0 To Calls.Count - 1
                Me.Response.Write(Calls(n).ID & Chr(9))
                Me.Response.Write(Calls(n).ID & Chr(9))
                Me.Response.Write(Calls(n).DateCreated & Chr(9))
                Me.Response.Write(Calls(n).Employee.Name & Chr(9))
                Me.Response.Write(Calls(n).NetDurationInText & Chr(9))
                Me.Response.Write(Calls(n).Result.Name & Chr(9))
                Me.Response.Write(vbCrLf)
                If n Mod 50 = 0 Then
                    Me.Response.Flush()
                End If
            Next
    Me.Response.End()

しかし、行数が 2000 ~ 3000 を超えると、Web サイトの応答が非常に遅くなります。50 行ごとにフラッシュしますが、2k ~ 3k 行で約 5 分かかります。100〜200行ごとにフラッシュしようとしましたが、文字列を直接Responseに書き込もうとしました(Response.Write( "")を意味します)デバッグするとループし、すべての時間が「forループ」で通過します。

この方法よりも速くデータをエクスポートするためのより良いアイデアはありますか?

注: "Calls" は、System.Collections.CollectionBase を継承するコレクションです。

4

2 に答える 2

0

問題を見つけました。それは私のコレクションに関連しています。これは、私が見つけたExcelにデータをエクスポートするための最良の方法であると言えます。

于 2012-08-17T14:00:58.617 に答える
0

これがオフの場合は、コメントしてください。削除します。私はC#なので誤解があるかもしれません。あなたのコードでは、書く前に srtBl 全体を構築しているように見えます。

    For n As Integer = 0 To Calls.Count - 1
        Me.Response.Write(Calls(n).ID & Chr(9))
        Me.Response.Write(Calls(n).DateCreated & Chr(9))
        Me.Response.Write(Calls(n).Employee.Name & Chr(9))
        Me.Response.Write(Calls(n).Customer.Link.Name & Chr(9))
        Me.Response.Write(Calls(n).Vendor.Link.Name & Chr(9))
        Me.Response.Write(Calls(n).Result.Name & Chr(9))
        Me.Response.Write(vbCrLf)
        If n Mod 50 = 0 Then
            Me.Response.Flush()
        End If
    Next
    Me.Response.End()
于 2012-08-17T13:24:32.713 に答える