如何使用RowSpan> 1垂直对齐单元格

时间:2011-11-30 12:50:27

标签: asp.net web-applications c#-2.0

我想要这个enter image description here,    而是拥有这个enter image description here。    请注意,当我将 VerticalAlign.Middle 更改为 VerticalAlign.Top 时,它实际上按预期工作。    请参阅以下我正在尝试的代码:

   // I assume that table table is already created and well-defined  
   // Create a new row

    TableRow tRow = new TableRow();

    tRow.HorizontalAlign = HorizontalAlign.Center;

    // add the row to the table

    table.Rows.Add(tRow);

    // Create a new cell

    TableCell tCell = new TableCell();

    tCell.VerticalAlign = VerticalAlign.Middle; // Want to get it in the middle of two merged rows

    tCell.RowSpan = 2;

    tCell.Text = "England";

    tCell.Font.Bold = true;

    tRow.Cells.Add(tCell);

    // Create new cell

    tCell = new TableCell();

    tCell.Text = "2010";

    tCell.Font.Bold = true;

    tRow.Cells.Add(tCell);

    // Create new row

    tRow = new TableRow();

    // add the row to the table

    table.Rows.Add(tRow);

    // Create new cell

    tCell = new TableCell();

    tCell.Text = "2011";

    tCell.Font.Bold = true;

    tRow.Cells.Add(tCell);

更新:请参阅下面的额外代码。我没有这样的html代码,但我看了 sw.ToString(),格式看起来没错,但excel文件似乎没有正确格式化。我的浏览器是IE,但我认为没关系。 我试过 tCell.CssClass =“className”; 结果是一样的。

public static void Comparison_Report(string fileName)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a table to contain the grid
Table table = new Table();

///----- Original code goes here----

// render the table into the htmlwriter
table.RenderControl(htw);
// render the htmlwriter into the response  
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}

}

}

3 个答案:

答案 0 :(得分:2)

请在CSS中执行此操作!在单元格上设置一个你想要“英格兰”的类并定位该类。

代码

tCell.Text = "England";
tCell.CssClass = "className";

的CSS

td.className {
   vertical-align:middle;
}

修改 好吧,大众要求解释为什么在这里使用CSS而不是在创建表格单元格时设置它。

使用单独的样式表所获得的是一大堆权力和控制这个元素在客户端上的外观。当您在代码中设置它时,您明确表示它应该只是这样 - 但是当您在CSS中设置并使用样式表时,您可以执行诸如定位不同平台,轻松更改位置,添加额外元素等操作。这是在内联样式和将样式拉出到单独的工作表之间的旧讨论。我认为如果你想了解更多关于它的话,在网上很好地讨论这个话题......

编辑2 我刚刚粘贴它时尝试了你的代码,它对我来说很好 - 细胞是中间对齐的。我会使用Firebug来尝试弄清楚是否有其他一些样式作用于该表格单元格以使其具有此行为。

答案 1 :(得分:2)

最后我自己测试了一下。如果在表格单元格上使用valign="middle",似乎无法在Excel中工作。你必须使用CSS。

所以而不是

tCell.VerticalAlign = VerticalAlign.Middle

DO

tCell.Style.Add("vertical-align", "middle")

这将在excel中正确对齐文本。如果将Excel从excel导出到html,Excel本身就会使用css类。

但重复我的评论,我建议生成一个真正的excel文件,而不是创建可能正确打开和解释的html。 EPPlus非常简单:Exporting data to excel

答案 2 :(得分:0)

<td   align='left' valign='middle' ></td>

不能从代码后面导出excel文件。所以我在互联网上搜索并找到了这个例子。

td.className {
   vertical-align:middle;
}

这节省了我的时间。 感谢