c datagrid 输出html,导出DataGridView到HTML页面

下面是我编写了包括在DataGridView的格式的方法:

public string ConvertDataGridViewToHTMLWithFormatting(DataGridView dgv)

{

StringBuilder sb = new StringBuilder();

//create html & table

sb.AppendLine("

sb.AppendLine("

");

//create table header

for (int i = 0; i < dgv.Columns.Count; i++)

{

sb.Append(DGVHeaderCellToHTMLWithFormatting(dgv, i));

sb.Append(DGVCellFontAndValueToHTML(dgv.Columns[i].HeaderText, dgv.Columns[i].HeaderCell.Style.Font));

sb.AppendLine("");

}

sb.AppendLine("

");

//create table body

for (int rowIndex = 0; rowIndex < dgv.Rows.Count; rowIndex++)

{

sb.AppendLine("

");

foreach (DataGridViewCell dgvc in dgv.Rows[rowIndex].Cells)

{

sb.AppendLine(DGVCellToHTMLWithFormatting(dgv, rowIndex, dgvc.ColumnIndex));

string cellValue = dgvc.Value == null ? string.Empty : dgvc.Value.ToString();

sb.AppendLine(DGVCellFontAndValueToHTML(cellValue, dgvc.Style.Font));

sb.AppendLine("");

}

sb.AppendLine("

");

}

//table footer & end of html file

sb.AppendLine("

");

return sb.ToString();

}

//TODO: Add more cell styles described here: https://msdn.microsoft.com/en-us/library/1yef90x0(v=vs.110).aspx

public string DGVHeaderCellToHTMLWithFormatting(DataGridView dgv, int col)

{

StringBuilder sb = new StringBuilder();

sb.Append("

sb.Append(DGVCellColorToHTML(dgv.Columns[col].HeaderCell.Style.ForeColor, dgv.Columns[col].HeaderCell.Style.BackColor));

sb.Append(DGVCellAlignmentToHTML(dgv.Columns[col].HeaderCell.Style.Alignment));

sb.Append(">");

return sb.ToString();

}

public string DGVCellToHTMLWithFormatting(DataGridView dgv, int row, int col)

{

StringBuilder sb = new StringBuilder();

sb.Append("

sb.Append(DGVCellColorToHTML(dgv.Rows[row].Cells[col].Style.ForeColor, dgv.Rows[row].Cells[col].Style.BackColor));

sb.Append(DGVCellAlignmentToHTML(dgv.Rows[row].Cells[col].Style.Alignment));

sb.Append(">");

return sb.ToString();

}

public string DGVCellColorToHTML(Color foreColor, Color backColor)

{

if (foreColor.Name == "0" && backColor.Name == "0") return string.Empty;

StringBuilder sb = new StringBuilder();

sb.Append(" style=\"");

if (foreColor.Name != "0" && backColor.Name != "0")

{

sb.Append("color:#");

sb.Append(foreColor.R.ToString("X2") + foreColor.G.ToString("X2") + foreColor.B.ToString("X2"));

sb.Append("; background-color:#");

sb.Append(backColor.R.ToString("X2") + backColor.G.ToString("X2") + backColor.B.ToString("X2"));

}

else if (foreColor.Name != "0" && backColor.Name == "0")

{

sb.Append("color:#");

sb.Append(foreColor.R.ToString("X2") + foreColor.G.ToString("X2") + foreColor.B.ToString("X2"));

}

else //if (foreColor.Name == "0" && backColor.Name != "0")

{

sb.Append("background-color:#");

sb.Append(backColor.R.ToString("X2") + backColor.G.ToString("X2") + backColor.B.ToString("X2"));

}

sb.Append(";\"");

return sb.ToString();

}

public string DGVCellFontAndValueToHTML(string value,Font font)

{

//If no font has been set then assume its the default as someone would be expected in HTML or Excel

if (font == null || font == this.Font && !(font.Bold | font.Italic | font.Underline | font.Strikeout)) return value;

StringBuilder sb = new StringBuilder();

sb.Append(" ");

if (font.Bold) sb.Append("");

if (font.Italic) sb.Append("");

if (font.Strikeout) sb.Append(" ");

//The element was deprecated in HTML 4.01. The new HTML 5 tag is: text-decoration: underline

if (font.Underline) sb.Append("");

string size = string.Empty;

if (font.Size != this.Font.Size) size = "font-size: " + font.Size + "pt;";

//The tag is not supported in HTML5. Use CSS or a span instead.

if (font.FontFamily.Name != this.Font.Name)

{

sb.Append("

sb.Append(font.FontFamily.Name);

sb.Append("; ");

sb.Append(size);

sb.Append("\">");

}

sb.Append(value);

if (font.FontFamily.Name != this.Font.Name) sb.Append("

");

if (font.Underline) sb.Append("");

if (font.Strikeout) sb.Append("");

if (font.Italic) sb.Append("");

if (font.Bold) sb.Append("");

return sb.ToString();

}

public string DGVCellAlignmentToHTML(DataGridViewContentAlignment align)

{

if (align == DataGridViewContentAlignment.NotSet) return string.Empty;

string horizontalAlignment = string.Empty;

string verticalAlignment = string.Empty;

CellAlignment(align, ref horizontalAlignment, ref verticalAlignment);

StringBuilder sb = new StringBuilder();

sb.Append(" align='");

sb.Append(horizontalAlignment);

sb.Append("' valign='");

sb.Append(verticalAlignment);

sb.Append("'");

return sb.ToString();

}

private void CellAlignment(DataGridViewContentAlignment align, ref string horizontalAlignment, ref string verticalAlignment)

{

switch (align)

{

case DataGridViewContentAlignment.MiddleRight:

horizontalAlignment = "right";

verticalAlignment = "middle";

break;

case DataGridViewContentAlignment.MiddleLeft:

horizontalAlignment = "left";

verticalAlignment = "middle";

break;

case DataGridViewContentAlignment.MiddleCenter:

horizontalAlignment = "centre";

verticalAlignment = "middle";

break;

case DataGridViewContentAlignment.TopCenter:

horizontalAlignment = "centre";

verticalAlignment = "top";

break;

case DataGridViewContentAlignment.BottomCenter:

horizontalAlignment = "centre";

verticalAlignment = "bottom";

break;

case DataGridViewContentAlignment.TopLeft:

horizontalAlignment = "left";

verticalAlignment = "top";

break;

case DataGridViewContentAlignment.BottomLeft:

horizontalAlignment = "left";

verticalAlignment = "bottom";

break;

case DataGridViewContentAlignment.TopRight:

horizontalAlignment = "right";

verticalAlignment = "top";

break;

case DataGridViewContentAlignment.BottomRight:

horizontalAlignment = "right";

verticalAlignment = "bottom";

break;

default: //DataGridViewContentAlignment.NotSet

horizontalAlignment = "left";

verticalAlignment = "middle";

break;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值