- PR -

Repeaterを利用したCSVダウンロードの改行について

1
投稿者投稿内容
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2006-04-21 10:29
「[ASP.NET]データベースの内容をクライアントにダウンロード提供するには?」を参照にVB.NETでRepeaterを利用したCSVダウンロードページを作成しています。
http://www.atmarkit.co.jp/fdotnet/dotnettips/210aspdbdwnload/aspdbdwnload.html

データベースの内容はダウンロードできているのですが、メモ帳やExcelで開くと改行コードがないためか、1レコードとして表示されてしまいます。SeparatorTemplateに「\r\n」を追加しても結果は同じでした。サンプルと同じように作成しているつもりですが、原因がよくわかりません。どなたかアドバイスをよろしくお願いします。

デザイン
<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>施設コード,施設名</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "SiteCd") %>
,<%# DataBinder.Eval(Container.DataItem, "SiteName") %>
</ItemTemplate>
</asp:Repeater>

コード
Sub Page_Load(sender As Object, e As EventArgs)

Response.AppendHeader("Content-Disposition","attachment; filename=down.csv")

Dim objConnection As New SqlConnection("・・・・・")
Dim strSQL As string
Dim objDataReader As SqlDataReader

strSQL = "Select SiteCd, SiteName From TBL_Site"
Dim cmd As New SqlCommand(strSQL, objConnection)
objDataReader = cmd.ExecuteReader(CommandBehavior.Default)

Repeater1.DataSource = objDataReader
Repeater1.DataBind()
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-04-21 17:27
お世話になります。

SeparatorTemplate に <%# ControlChars.NewLine %> を使うと
改行されるみたいです。
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2006-04-24 09:06
さっそくのアドバイスありがとうございます。

Separator Templateで試してみましたが、状況は変わらずでした。
他に考えられる対応策はありますでしょうか?

<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate>施設コード,施設名
</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "SiteCd") %>
,<%# DataBinder.Eval(Container.DataItem, "SiteName") %>
</ItemTemplate>
<SeparatorTemplate>
<%# ControlChars.NewLine %>
</SeparatorTemplate>
</asp:Repeater>
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-04-24 09:37
お世話になります。

確認なのですが、
@PageディレクティブのResponseEncoding属性は Shift_JIS になっていますよね。

以下のコードで実験したところ、
ヘッダ行及び明細行にも改行が入っていました。
aspx
コード:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm6.aspx.vb" Inherits="WebApplication2.WebForm6" ResponseEncoding="Shift_JIS" %>
<asp:Repeater id="Repeater1" runat="server">
	<HeaderTemplate>著者ID,著者名<%# ControlChars.NewLine%></HeaderTemplate>
	<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "au_id") %>,<%# DataBinder.Eval(Container.DataItem, "au_name") %></ItemTemplate>
	<SeparatorTemplate><%# ControlChars.NewLine %></SeparatorTemplate>
</asp:Repeater>



CodeBehind
コード:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ' ページを初期化するユーザー コードをここに挿入します。
  Response.AppendHeader("Content-Disposition", "attachment; filename=down.csv")
  Dim db As New SqlConnection("Data Source=(local);User ID=sa;Password=sa;Persist Security Info=True;Initial Catalog=pubs")
  Dim objCom As New SqlCommand("SELECT au_id, (au_lname + au_fname) AS au_name FROM authors", db)
  Dim objDr As SqlDataReader

  db.Open()
  objDr = objCom.ExecuteReader()
  Me.Repeater1.DataSource = objDr
  Me.Repeater1.DataBind()
  db.Close()
End Sub

ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2006-04-24 10:07
ご回答ありがとうございます。


@Pageディレクティブは以下の通りになっています。

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="DownloadCsv.aspx.vb" Inherits="AAA.DownloadCsv" ContentType="application/octet-stream" ResponseEncoding="Shift_JIS"%>

なおこさんの言われたとおり、改行コードは入っていますが、できあがったcsvファイルがhtml形式になってしまっているのが、原因のようです。タグが入らないようにするにはどこか指定する箇所があるのでしょうか?ご教授よろしくお願いいたします。

↓できあがったファイルは以下になります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>DownloadCsv</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language="JavaScript" src="./JavaScript/Common.js"></script>
</HEAD>
<body id="Body1" onUnload="javascript:CloseChildWindow();">
<form name="Form1" method="post" action="DownloadCsv.aspx" id="Form1" onKeydown="javascript:KeyCheck();">
<input type="hidden" name="__VIEWSTATE" value="" />
施設コード,施設名


1111
,施設名

</form>
</body>
</HTML>
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2006-04-24 19:42
お世話になります。

引用:

ゆっきーさんの書き込み (2006-04-24 10:07) より:

なおこさんの言われたとおり、改行コードは入っていますが、できあがったcsvファイルがhtml形式になってしまっているのが、原因のようです。タグが入らないようにするにはどこか指定する箇所があるのでしょうか?ご教授よろしくお願いいたします。



aspx ファイルには、
私の前のレスの様に、
Page ディレクティブと <asp:Repeater... のみにしないと
駄目なようです。

また、<HeaderTemplate> や <ItemTemplate> や <SeparatorTemplate> に
余分な改行やタブなどがあると、うまく出力されませんでした。
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2006-04-25 09:17
なおこさんの言われたとおり、いらないタグを除いたら、うまくいきました。まだまだいろいろと試してみたいと思います。

いろいろご教授ありがとうございました〜!
1

スキルアップ/キャリアアップ(JOB@IT)