至少3种方式我能想到的,可以这样做: -Telerik的网格自定义格式范围
1日(理想) - 其中有大约8列一个Telerik的网格,第一个关口会列出下一个6的所有表格条目,用于显示为每个条目提交的不同日期,但并非每个条目都必须具有值,最后的col将链接到单独页面上的每个条目以允许通过日期选择器提交新日期或将编辑。
主要问题是我需要能够根据每个列以不同的颜色显示网格上的每个日期,我的意思是我在每年更新的第一列中记录一个日期,因此如果> 6个月然后是颜色1,> 1个月的颜色2,< 1个月的颜色3,最后如果过去1年,则标记颜色4.
另外还有两种不同的续订长度。
第二个 - 每个不同的更新长度都会得到自己的网格,所以第一个为1y,第二个为第二个长度,第三个为第三个长度。
第3(有可能) - 4个网格来替换颜色,它将简单地显示每个类别,因此1个网格将显示所有超过6个月的入口,2个网格显示大于1个月,3个网格显示少于1个月,网格4会显示过去的时间长度。
我不知道如何最好地排序日期的方式,将做我所需要的,但我认为选项1将是可能的或选项3是最简单的。
编辑 -
using System
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace (...).Models.DTO
{
public class ...DTO
{
public int Id { get; set; }
public string Name { get; set; }
//public string C1D
//{
// get
// {
// if (C1D < DateTime.Today.AddDays(-183)) return "Green";
// }
//}
public string C1D
{
get
{
if ((C1D = DateTime.ParseExact(C1D, "yyyy/mm/dd", null)) < DateTime.Today.AddDays(-183)) return "Green";
}
set;
}
public string C2D { get; set; }
这说明我如何在两种不同的方式和C2D试图建立C1D如何我通常设置,其中进入Telerik的电网的cols。
[GridAction]
public ActionResult _List(int? Id)
{
List<...DTO> ret = new List<...DTO>();
_db.(...).ToList().ForEach(x =>
{
ret.Add(new ...DTO
{
Id = x.Id,
Name = x.(...)Name,
C1D = (x.C1SD.HasValue) ? x.C1SD.Value.ToShortDateString() : "",
C2D = (x.C2SD.HasValue) ? x.C2SD.Value.ToShortDateString() : "",
这是我将如何去设置它在控制器中显示数据在电网中。
下面是如何设置我的观点
<% Html.Telerik().Grid<(...).Models.DTO.(...)DTO>()
.Name("...List")
.DataKeys(dk => dk.Add(x => x.Id))
.Columns(c =>
{
c.Bound(x => x.Name);
c.Bound(x => x.C1D)
.Title("...");
c.Bound(x => x.C2D)
.Title("...");
c.Bound(x => x.C3D)
.Title("...");
c.Bound(x => x.C4D)
.Title("...");
c.Bound(x => x.C5D)
.Title("...");
c.Bound(x => x.C6D)
.Title("...");
c.Bound(x => x.C7D)
.Title("...");
})
.Sortable()
.Filterable()
.DataBinding(db => db.Ajax().Select("_List", "..."))
.Render();
%>
编辑2 - 我 也试过
.ClientEvents(e => e.OnDataBound("onDataBound"))
function onDataBound(e) {
if (e.dataItem.C1D > DateTime.Today.AddDays(183)) {
e.cell.style.backgroundColor = "green";
}
if (e.dataItem.C1D > DateTime.Today.AddDays(30)) {
e.cell.style.backgroundColor = "orange";
}
if (e.dataItem.C1D > DateTime.Today) {
e.cell.style.backgroundColor = "red";
}
if (e.dataItem.C1D <= DateTime.Today) {
e.cell.style.backgroundColor = "purple";
}
}
,并在到达这个页面将打入代码和说“Microsoft JScript运行时错误:'dataItem.C1D'为空或不是对象”和“Microsoft JScript运行时错误:'cell.style'为空或不是对象”,然后显示页面的机智h网格中的所有日期,以便这些项目不为空,但是否有其他代码/格式我应该用来执行此功能?
而且还看着http://demos.telerik.com/aspnet-mvc/grid/customformatting在问候.cellaction像下面
.CellAction(cell =>
{
if (cell.Column.Title == "Title Name")
{
if (cell.DataItem.C1D > DateTime.Today.AddDays(183))
{
//Set the background of this cell only
cell.HtmlAttributes["style"] = "background:red;";
}
}
})
,我不得不改变,请将.Name到.title伪因为它不承认.name和,但我得到了错误味精“错误1运算符'>'不能应用于'string'和'System.DateTime'类型的操作数,所以我似乎无法在单元操作中执行这个复杂的任务。
我也张贴了这个在连接到另一个问题Telerik的论坛,但至今没有答复 http://www.telerik.com/community/forums/aspnet-mvc/grid/telerik-grid-row-custom-formatting-on-either-bit-int-string-field.aspx
编辑3 -
额外的控制器代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using (Database Name).Models;
using (Database Name).Models.DTO;
using Telerik.Web.Mvc;
using Telerik.Web.Mvc.UI;
namespace (Database Name).Controllers
{
public class (Controller Name)Controller : Controller
{
(Database Name)Entities _db = new (Database Name)Entities();
public ActionResult List()
{
return View();
}
这就是它现在有我可以提供任何东西,因为没有任何东西可以对电子网格产生任何影响,所以如果还有别的东西可能会隐藏在我可能会出现的其他地方那么请解释一下这可能是什么,因为我没有包括的唯一东西就是用于创建和编辑页面的代码,但它们涉及到的只是制作每个简单记录,然后允许用户更改记录的日期。
想知道标题是否不够准确,或者这太复杂了,难以快速解决问题 – Myzifer 2011-03-11 13:02:24