これを行うことができると私が考えることができる少なくとも3つの方法:-
1 番目 (理想的) - 約 8 列の単一のテレリック グリッドでは、最初の列にはすべてのテーブル エントリがリストされ、次の 6 列は各エントリに送信されたさまざまな日付を表示しますが、必ずしもすべてのエントリに値があるとは限りません。最後の列はリンクします。別のページの各エントリに、datepicker を介して新しい日付を送信したり、編集したりできるようにします。
主な問題は、各列に応じてグリッド上の各日付を異なる色で表示できるようにする必要があることです。つまり、1 列目に毎年更新される日付を記録するので、6 か月以上の場合は色 1 になります。 、>1 か月のカラー 2、<1 か月のカラー 3、そして最後に 1 年以上経過している場合はカラー 4 です。
他の列についても、2 つの異なる更新期間があります。
2nd - それぞれの異なる更新の長さは独自のグリッドを取得するため、1 年目は 1 年目、2 年目は 2 年目、3 年目は 3 年目です。
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; }
ここでは、2 つの異なる方法で C1D をセットアップしようとした方法と、C2D の場合、テレリック グリッドに入る列を通常どのようにセットアップするかを示します。
[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' は null またはオブジェクトではありません」および「Microsoft JScript ランタイム エラー: 'cell.style' は null またはオブジェクトではありません」と表示されます。次に、グリッド内のすべての日付を含むページを表示して、これらの項目が null にならないようにしますが、この機能を実行するために使用する必要がある他のコード/形式はありますか?
また、以下のような .cellaction に関してhttp://demos.telerik.com/aspnet-mvc/grid/customformattingも調べました
.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 を認識しなかったため、.Name を .Title に変更する必要がありましたが、「エラー 1 演算子 '>' はタイプ 'string' および 'System.DateTime' のオペランドに適用できません」というエラー メッセージが表示されます。この複雑なタスクをセル アクションで実行することはできないようです。
別の質問に添付されたテレリック フォーラムにもこれを投稿しましたが、これまでのところ返信はありません http://www.telerik.com/community/forums/aspnet-mvc/grid/telerik-grid-row-custom-formatting-on -どちらか-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();
}
テレリックグリッドに何らかの影響を与える可能性のあるものは他にないため、私が提供できる可能性があるものは何も残っていません.私が含めていないのは作成ページと編集ページで行うコードだけですが、それらに含まれるのは単純な記録を作成し、ユーザーが記録された日付を変更できるようにすることだけだからです。