Hiện có DataTable, nhưng muốn truyền dữ liệu đó tới người dùng thông qua WebHandler. FileHelpers có CommonEngine.DataTableToCsv(dt, "file.csv")
. Tuy nhiên nó lưu nó vào một tập tin. Tôi có thể lưu nó vào luồng thay thế bằng cách nào? Tôi biết làm thế nào để làm điều đó khi tôi biết các cột trong nâng cao hoặc họ không thay đổi, nhưng tôi muốn tạo ra các tiêu đề cột ngay từ bảng dữ liệu.Chuyển đổi DataTable sang luồng CSV
Nếu tôi biết các cột tôi chỉ cần tạo các lớp:
[DelimitedRecord(",")]
public class MailMergeFields
{
[FieldQuoted()]
public string FirstName;
[FieldQuoted()]
public string LastName;
}
Sau đó sử dụng FileHelperEngine và thêm các hồ sơ:
FileHelperEngine engine = new FileHelperEngine(typeof(MailMergeFields));
MailMergeFields[] merge = new MailMergeFields[dt.Rows.Count + 1];
// add headers
merge[0] = new MailMergeFields();
merge[0].FirstName = "FirstName";
merge[0].LastName = "LastName";
int i = 1;
// add records
foreach (DataRow dr in dt.Rows)
{
merge[i] = new MailMergeFields();
merge[i].FirstName = dr["Forename"];
merge[i].LastName = dr["Surname"];
i++;
}
Cuối cùng viết thư cho một dòng:
TextWriter writer = new StringWriter();
engine.WriteStream(writer, merge);
context.Response.Write(writer.ToString());
Thật không may là tôi không biết các cột trước khi bàn tay, tôi không thể tạo lớp trước khi bàn tay.
Bạn có thể kiểm tra https://gist.github.com/riyadparvez/4467668 – user
Thư viện Trình trợ giúp tệp này là nguồn mở. Tại sao bạn không crack vào nó và thêm phương pháp của riêng bạn? – Keltex
@user: Gist này chứa lỗi trong đó các mục nhập bằng dấu phẩy sẽ không được xử lý chính xác. Xem http://stackoverflow.com/q/769621/1461424 – Krumia