将Div添加到GridView

时间:2016-07-05 18:27:31

标签: c# html asp.net gridview

我正在尝试在gridview表中的一列的td中添加div。我发现this question类似于我想要做的事情,但答案并不彻底让我无法按照自己的意愿行事。基本上,我是从DataTable dt自动生成gridview的数据:

GridView1.DataSource = dt;
GridView1.DataBind();

gridview的html在这里:

<div class="gridTable" style="width:100%">
  <asp:GridView runat="server"  ID="GridView1" OnRowDataBound="GridView1_RowDataBound">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <div id="insideDiv" runat="server"></div>
            </ItemTemplate>
        </asp:TemplateField>           
    </Columns>
  </asp:GridView>
</div>

我希望在标题为“评论”的列上有一个内部div。我用OnRowDataBound函数得到了这个:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
        {
            HtmlGenericControl div = (HtmlGenericControl)e.Row.FindControl("insideDiv");

        }
}

但我不确定如何离开这里。我需要的是能够访问我的CSS中的div,因为该列的格式与其他列不同。

1 个答案:

答案 0 :(得分:2)

您可以使用数据绑定表达式设置div的内容,并设置您将在CSS样式中引用的类属性。假设内容由数据源的Comments字段给出,它可能如下所示:

<asp:TemplateField>
    <ItemTemplate>
        <div class="innerDiv" >
            <%# Eval("Comments") %>
        </div>
    </ItemTemplate>
</asp:TemplateField>

然后,您可以为innerDiv类添加样式定义:

<style type="text/css">
    .innerDiv
    {
        ...
    }
</style>


更新

在您的评论(下方)中,您提到您希望替换自动生成列的内容,而不是添加具有TemplateField的列。为此,您可以使用与Hide Column in GridView from Code Behind中使用的技术类似的技术。

Comments字段的列索引定义变量:

private int commentsColIndex;

从DataTable获取其值:

commentsColIndex = dt.Columns["Comments"].Ordinal;
GridView1.DataSource = dt.DefaultView;
GridView1.DataBind();

RowDataBound事件处理程序中的div元素替换其内容,并设置div元素的class属性:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        TableCell commentsCell = e.Row.Cells[commentsColIndex];
        HtmlGenericControl div = new HtmlGenericControl("DIV");
        div.Attributes.Add("class", "innerDiv");
        div.InnerHtml = commentsCell.Text;
        commentsCell.Text = string.Empty;
        commentsCell.Controls.Add(div);
    }
    ...
}

N.B。如果在行中移动或删除了某些其他单元格,则可能必须向commentsColIndex添加偏移量。