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

时间:2015-05-22 17:35:53

标签: c# jquery asp.net gridview

GridView的部分HTML源代码(ID:MyGrid):

...
<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完成,我想要解决方案。

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

1 个答案:

答案 0 :(得分:1)

我不是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'
            });
        }
    });
});

编辑:

要循环整个表格,如果第&#34;第6列&#34;包含比今天更早的日期,您可以这样做:

$('#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. 相关表格的ID为myTableId
  2. &#34;第6列&#34;单元格的类别为my6thColumnClass,如下所示:<td class="my6thColumnClass">