如何在RowDataBound中为GridView使用templatefield项

时间:2015-11-19 19:19:08

标签: c# asp.net gridview

ASP.net:

...
<asp:BoundField HeaderStyle-Width="7%" DataField="Due Date" HeaderText="Due" SortExpression="Due Date" ItemStyle-CssClass="taskTableColumn" />
...

C#代码(RowDataDound中的GridView):

if (!string.IsNullOrEmpty(e.Row.Cells[4].Text)) //works correctly
{
    if (DateTime.Parse(e.Row.Cells[4].Text).Date < DateTime.Now.Date)
    {
        e.Row.ForeColor = Color.FromName("#C00000");
        e.Row.ToolTip = "Task is Past Due";
    }
    else if (DateTime.Parse(e.Row.Cells[4].Text).Date <= DateTime.Now.AddDays(inDateOffset).Date)
    {
        //e.Row.ForeColor = Color.FromName("#8A8C00");
        e.Row.ToolTip = "Task is at Risk";
    }
    else
    {
        e.Row.Cells[5].ToolTip = "Task is Not Due Yet";
    }
}

上述ASP.net/C#代码工作正常。

我必须修改ASP.net以格式化该字段:

<asp:TemplateField HeaderStyle-Width="7%" HeaderText="Due" SortExpression="Due Date" ItemStyle-CssClass="taskTableColumn">
    <ItemTemplate>
        <asp:Label ID="lblDue" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Due Date", "{0:MM-dd-yyyy}") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

现在,以下行始终返回空字符串:if (!string.IsNullOrEmpty(e.Row.Cells[4].Text))

如何修改C#代码,以便能够确定日期是否已到期。

1 个答案:

答案 0 :(得分:2)

因为您现在使用的是<asp:TemplateField>,所以您无法再以相同的方式获取文字。您必须找到实际的标签控件。您不必使用e.Row.Cells,而是使用绑定数据的标签。

Label lblDue = (Label)e.Row.FindControl("lblDue");
if (!string.IsNullOrEmpty(lblDue.Text))
{
    ...
}