为什么GridView的RowCreated函数中e.Row.DataItem为null

Why is e.Row.DataItem null in RowCreated function of GridView

GridView(ID:MyGrid)的部分 HTML 来源:

...
<tr title="Task is Past Due" style="color:#C00000;background-color:#EBE9E9;">
    <td>
        <input type="image" name="ctl00$ContentMain$yourTasksGV$ctl04$btnShowDepend" id="btnShowDepend" title="Click to view Dependencies" class="gvTaskDep btnShowDepend" src="es.png" alt="" />
        <div id="pnlSubTasks" class="pnlSubTasks">
            <div>
            </div>
        </div>
    </td>
    <td style="background-color:DarkRed;">
    </td>
    <td class="taskTableColumn">SOMETHING</td>
    <td class="taskTableColumn">Something</td>
    <td class="taskTableColumn">Something</td>
    <td class="taskTableColumn">03-09-2015</td> //<asp:BoundField HeaderStyle-Width="7%" DataField="Due Date" HeaderText="Due" SortExpression="Due Date" ItemStyle-CssClass="taskTableColumn" />
    <td class="taskTableColumn">Something</td>
    <td class="taskTableColumn">Something</td>
    <td class="taskTableColumn">Something</td>
    <td class="taskTableColumn">Something</td>
    <td class="taskTableColumn">&nbsp;</td>
    <td class="taskTableColumn"></td>
    <td class="hideTag">1</td>
    <td class="hideTag">155</td>
</tr>
...

当我点击 btnShowDepend 图像执行一些操作时,在 GridView RowCreated 函数中失败:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    var k = DataBinder.Eval(e.Row.DataItem, "Due Date"); //k=null
    DateTime dt;
    DateTime.TryParse(DataBinder.Eval(e.Row.DataItem, "Due Date").ToString(), out dt); //e.Row.DataItem = null
    if (dt < DateTime.Today)
    {
        //or do it for a specific cell
        e.Row.Cells[1].BackColor = System.Drawing.Color.DarkRed;
    }
}

为什么 k 为 null,我该如何修改代码来修复它。

请注意:如果也可以使用 JQuery 来完成,我想要那个解决方案。

我想将列的 Due Date 小于今天日期的任何行的字体颜色设置为红色。

我不是 ASP.net 人,但是 jQuery 你可以像这样使用 Date.parse

$('#btnShowDepend').on('click', function () {
    var now = Date.now();

    $('td.taskTableColumn').each(function () {
        var date = Date.parse($(this).text());

        // Skip invalid dates
        if (isNaN(date)) return;

        if (date < now) {
            $(this).css({
                backgroundColor: 'red'
            });
        }
    });
});

编辑:

要循环遍历整个 table,如果“第 6 列”包含早于今天的日期,则将每一行变为红色,您可以这样做:

$('#btnShowDepend').on('click', function () {
    var now = Date.now();

    $('#myTableId tr').each(function () {
        var $row = $(this);
        var the6thColumn = $row.find('.my6thColumnClass');
        var date = Date.parse($(the6thColumn).text());

        // Skip invalid dates
        if (isNaN(date)) return;

        if (date < now) {
            $row.css({
                backgroundColor: 'red'
            });
        }
    });
});

假设:

  1. 有问题的 table 的 ID 为 myTableId
  2. “第 6 列”单元格的 class 为 my6thColumnClass,如下所示:<td class="my6thColumnClass">