为什么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"> </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'
});
}
});
});
假设:
- 有问题的 table 的 ID 为
myTableId
- “第 6 列”单元格的 class 为
my6thColumnClass
,如下所示:<td class="my6thColumnClass">
。
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"> </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'
});
}
});
});
假设:
- 有问题的 table 的 ID 为
myTableId
- “第 6 列”单元格的 class 为
my6thColumnClass
,如下所示:<td class="my6thColumnClass">
。