在System.Web.Helpers.WebGrid中定义内联行样式

时间:2011-02-09 14:48:43

标签: asp.net-mvc asp.net-mvc-3 webgrid

我正在将我的应用程序移动到MVC 3并尝试使用System.Web.Helpers.WebGrid。我想获得如下的HTML代码:

<table>
    <tr style="background-color: <%= item.Color %>">
    </tr>
    <tr style="background-color: <%= item.Color %>">
    </tr>
    <tr style="background-color: <%= item.Color %>">
    </tr>
</table>

rowStyle属性,允许为每一行定义css类,但每行都有不同的样式。它容易实现吗?

5 个答案:

答案 0 :(得分:6)

所以我必须完成黑客攻击。首先,将颜色包含在另一列的一部分中。它必须以MvcHtmlString返回以避免其他编码:

<%  
    var grid = new WebGrid(Model);
%>
<%= 
    grid.GetHtml(
        tableStyle: "table_class",
        columns:  grid.Columns(
            grid.Column("Importance", CTRes.Importance, (item) => 
                new MvcHtmlString(Html.Encode(item.Importance) + 
                "<div class='color' style='display: none;'>#" + item.Color + "</div>"))
        )
    ) 
%>

然后我们在$(document).ready()中设置bacground颜色:

<script type="text/javascript">
    $(document).ready(
        function () {
            $('.table_class .color').each(function (index, element) { $(element).parent().parent().css('background-color', $(element).html()); });
        }
    );
</script>

答案 1 :(得分:2)

据我所知,WebGrid目前不支持除了指定CSS类之外的行样式。

如果您想使用WebGrid,那么我能想到的唯一选择是:

  1. 将列中的颜色值渲染为文本
  2. 使用display:none
  3. 列上的CSS类隐藏该列
  4. 使用一点jQuery将background-color样式设置为隐藏列中文本颜色的样式
  5. 这对我来说似乎是一个丑陋的黑客,所以我建议,如果你真的需要对表格显示进行那种程度的控制,那么就不要费心去WebGrid并自己渲染HTML。有很多关于实现自己的分页和排序的信息。

答案 2 :(得分:0)

你可以使用alternatingRowStyle:“(你的交替行的CSS类)”这样做,我相信。

像:

<div id="grid">
    @grid.GetHtml(
        tableStyle: "grid",
        headerStyle: "head",
        alternatingRowStyle: "alt",
        columns: grid.Columns(
            grid.Column("FirstName"),
            grid.Column("LastName"),
            grid.Column("Salary",format:@<text>$@item.Salary</text>)
        )
    )
</div>

这应该将css类“alt”应用于生成的网格中的交替行。

我从以下的例子中得到了例子:

http://weblogs.asp.net/shijuvarghese/archive/2010/10/08/using-the-webgrid-helper-in-asp-net-mvc-3-beta.aspx

答案 3 :(得分:0)

好的,我实施这个有点困难所以我想根据接受的答案展示我的所作所为。也许这会对你有帮助。

grid.Column("Status", "Status", (item) => 
     new MvcHtmlString(Html.Encode(item.Status) +
     "<div class='color' style='display: none;'>#" + item.RowColor + "</div>"))

我刚从我的Row对象中检索了颜色,如下所示:

public class MyRowType {
        public String Status { get; set; }

        public String RowColor
        {
            get{
                switch (Status)
                {
                    case "RUNNING":
                        return "0000FF";
                    case "FAILED":
                        return "FF0000";
                    default:
                        return "00FF00";
                }
            }
        }
    }

“状态”列之前存在,但现在整个行都根据“状态”字段中的值着色。

答案 4 :(得分:0)

grid.Column("ColumnName", canSort: true,
    format: (item) =>
    {
        String Oabsent=string.Empty;
        if (item.ColumnName)
        {
            Oabsent += 
                 "<span style=\"color:#FF0000 ; display:table\">" 
                 + item.ColumnName+ "</span><br/>";
        }
        else { Oabsent += item.ColumnName; }

        return new HtmlString(Oabsent);
    }),