我正在尝试在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,因为该列的格式与其他列不同。
答案 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
添加偏移量。