- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个带有动态数据源的 telerik 网格(网格可能使用多达大约 10 个完全不同的数据模型),所以我也必须动态构建列(显然)。网格中的一列(对于某些模型)是一个 double ,表示以毫秒为单位的时间跨度。 我想要做的是将这个 double 格式化为看起来像一个时间跨度。telerik 代码如下所示:
<% Html.Telerik()
.Grid(Model.DynamicGridDataSource)
.Name("statisticalGrid")
.Columns(a => GridHelper.GenerateColumns(a, Model.SelectedReport))
.DataBinding(dataBinding => dataBinding.Ajax().Select("_SelectGrid", "Reports", new { reportId = Model.ReportId, dateFrom = Model.DateFrom, dateTo = Model.DateTo, date = Model.Date, AvailablePlans = Model.AvailablePlans }))
.Sortable(GridSortSettingsBuilder => GridHelper.SortColumns(GridSortSettingsBuilder,
Model.DynamicGridDataSource.GetType(),
Model.SelectedReport))
.Filterable()
.Pageable(page => page.PageSize(25))
.Reorderable(reorder => reorder.Columns(true))
.Groupable
(
groupingSettingsBuilder => GridHelper.GroupColumns(groupingSettingsBuilder,
Model.DynamicGridDataSource.GetType(),
Model.SelectedReport)
)
.ClientEvents(events => events
.OnColumnReorder("onReorder"))
.Render();
GridHelper.GenerateColumns 看起来像这样:
public static void GenerateColumns(GridColumnFactory<dynamic> columnFactory, Company.Product.Data.Entity.Report reportStructure)
{
foreach (var columnLayout in reportStructure.ReportCols.OrderBy(o => o.ColumnSequence))
{
var columnBuilder = columnFactory.Bound(columnLayout.ColumnType);
if (columnLayout.ColumnType.Equals("SessionLength") ||
columnLayout.ColumnType.Equals("AverageTime") ||
columnLayout.ColumnType.Equals("TotalTime") ||
columnLayout.ColumnType.Equals("CallTime"))
{
// disable grouping
columnBuilder.Groupable(false);
string dataBindProperty = columnLayout.ColumnType;
if (columnLayout.DataFormat == "{0:T}")
{
//Even though the format looks like time ({0:T}), its actually a double which needs to be formatted here to look like a TimeSpan
}
}
if (!string.IsNullOrEmpty(columnLayout.Label))
{
columnBuilder.Title(columnLayout.Label);
}
if (columnLayout.DataFormat != null && columnLayout.DataFormat == "{0:P}")
{
columnBuilder.Format("{0:P}");
}
if (columnLayout.SumIndicator)
{
if (columnLayout.DataFormat == "{0:T}")
{
AddAggregateToColumnTimeSpan(columnBuilder, Aggregate.Sum);
}
else
{
AddAggregateToColumn(columnBuilder, Aggregate.Sum);
}
}
if (columnLayout.HideIndicator)
{
columnBuilder.Column.Hidden = true;
}
}
}
我能够正确格式化页脚,但我不知道如何格式化该列的其余部分,因为在 telerik 代码的上下文之外我无法访问 item
迭代器或任何东西。有什么建议/想法吗?也许 columnFactory.Bound(columnType).Format(/*something*/)
?
最佳答案
您说过,“网格可能为其数据使用多达大约 10 个完全不同的模型”,因此也许您不必尝试在一个网格中表示所有这些模型,而是每个模型都有一个网格。您可以将每个网格放在它自己的局部 View 中,并使用某种机制来决定要加载哪个局部 View 。这是一个简单的例子。
Controller
public ActionResult DynamicReport
{
//Get your Model
Model.model1 = model_01 = Model.DynamicGridDataSource.GetDynamicModel()
//Get the name of what model is being returned so view knows which
//partial view to load
ViewBag.Message = model_01.Name
...
return View(model_01)
}
在 View 中有一些条件逻辑来选择加载哪个局部 View 。
查看
<h2>View</h2>
@{
string pView = "~/Views/Grid/Partial_01.cshtml";
switch(ViewBag.Message)
{
case "p02":
pView = "~/Views/Grid/Parital_02.cshtml"
break;
.....
}
}
@Html.Partial(pView)
局部 View _01
@model List<Models.Misc>
@(Html.Telerik().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(a => a.Id).Width(120);
columns.Bound(a => a.Name).Width(100);
columns.Bound(a => a.Value).Format("{0:#,##0.00}").Width(100).Title("Price");
})
)
PartialView_02
@model List<Models.Temp>
@(Html.Telerik().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(o => o.Name)
.Aggregate(aggregates => aggregates.Count())
.FooterTemplate(@<text>Total Count: @item.Count</text>)
.GroupFooterTemplate(@<text>Count: @item.Count</text>);
columns.Bound(o => o.Start)
.Template(@<text>@item.Start.ToShortDateString()</text>)
.Aggregate(aggreages => aggreages.Max())
.FooterTemplate(@<text>Max: @item.Max.Format("{0:d}")</text>)
.GroupHeaderTemplate(@<text>Max: @item.Max.Format("{0:d}")</text>)
.GroupFooterTemplate(@<text>Max: @item.Max.Format("{0:d}")</text>);
columns.Bound(o => o.Value)
.Width(200)
.Aggregate(aggregates => aggregates.Average())
.FooterTemplate(@<text>Average: @item.Average</text>)
.GroupFooterTemplate(@<text>Average: @item.Average</text>);
columns.Bound(o => o.tsMilliseconds)
.Width(100)
.Aggregate(aggregates => aggregates.Sum())
.Template(@<text>@TimeSpan.FromMilliseconds(@item.tsMilliseconds)</text>)
.Title("TimeSpan")
.FooterTemplate(
@<text>
<div>Sum: @TimeSpan.FromMilliseconds(@Convert.ToDouble(@item.Sum.Value.ToString())) </div>
</text>)
//header if you group by TimeSpan
.GroupHeaderTemplate(@<text>@item.Title: @item.Key (Sum: @TimeSpan.FromMilliseconds(@Convert.ToDouble(@item.Sum.Value.ToString())))</text>)
//footer for grouping
.GroupFooterTemplate(@<text>Sum: @TimeSpan.FromMilliseconds(@Convert.ToDouble(@item.Sum.Value.ToString()))</text>);
})
.Sortable()
.Groupable(settings => settings.Groups(groups => groups.Add(o => o.Start)))
)
依此类推,针对每个不同的模型。由于每个模型都有自己的局部 View ,您可以轻松地设置每个网格的格式以适合其模型,同时仍然只有一个主视图。
关于c# - Telerik 网格自定义列构建/格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11036227/
我在使用 CodedUI 时遇到了 Silverlight 中选项卡的 telerik 控件的问题。我可以使用 CodedUI 记录我在选项卡中执行的操作,但是当我开始执行 CodedUI 测试时,它
我将网格与 Telerik 的“客户端选择”(http://demos.telerik.com/aspnet-mvc-beta/grid/selectionclientside) 一起使用,并且我的页
我知道我需要使用模板列,但我不清楚如何使用它。 我有一个返回集合的数据源,我可以将集合中的每个属性分配给一个列。 但是我该怎么做: 合并两列?如 col.prop1 +' '+ col.prop2 ?
我有一个 Telerik MVC 网格,其中包含一个 bool 值 CreateIncident。对于新行,我想将该值设置为 true。对于编辑,如果该值已经为真,我想禁用该复选框。剑道 UI 显然是
我使用的是 Telerik 的 RadGrid(RadGrid.Net2(我知道我应该升级到更新的版本,但这里不是一个选项..))。它的功能之一是将数据导出到 excel。使用 grid.Master
我在 asp .net 中创建了一个 telerik RadGrid。我的要求是为列标题提供我自己的颜色。我们怎样才能做到这一点...?下面是我正在使用的代码结构。
是否可以使用 Telerik MVC 扩展在链接标签上设置媒体属性 StyleSheetRegistrar方法? group .Add("telerik.common.css")
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我在 Telerik MVC Grid 中有一个 DateTime 类型的列。我只想使用它的 Date 部分进行显示和过滤。结果,我使用了以下代码 @(Html.Telerik().Grid()
Xamarin 用 C# 编写模型 用每个操作系统自己的 native 方式编写 View Xamarin promise 在同一天添加库中的新功能 Telerik native 脚本 用 javas
我想在 TreeView 中选择子项时获取父项,并且还想查找所选节点是父节点还是子节点。 如果有人知道如何实现它,请告诉我。 提前致谢, 钦纳亚 最佳答案 为了获取所选节点,您需要使用 select事
我有一个使用自定义编辑模板的弹出编辑模式的radgrid。按下回车键后的编辑表单会将新项目插入网格。我进去添加一个项目。成功插入。然后我添加第二个项目:出现弹出窗口。我输入数据,然后按“输入”键插入项
我试图在预渲染事件中隐藏/显示嵌套telerik rad网格上的不同列,基于一个标志,但无论我将可见或显示属性设置为什么,它们都显示 这些是我的网格列:
我们如何删除以前在 Telerik RadGrid 上在 Post Back 上完成的数据排序。 最佳答案 将主表 View 的 SortExpression 设置为清除。 例子: _rdGrdRep
Telerik Rad Grid 中 ajax 完成事件的名称是什么?我尝试了文档中的内容,但出现以下错误 Parser Error Message: Type 'Telerik.Web.UI.Gri
我正在使用 Telerik 的 MVC 网格,并且我想提交带有一些超出网格值的批量编辑模式更改。根据这个telerik forum我可以调用网格的 submitChanges 函数并在 OnSubmi
我目前正在更改一个网站,该公司希望将所有内容从 Telerik 更改为 Kendo。 我现在遇到了一些麻烦。在 BindTo 方法中可以有一些映射,而 .ItemDataBound 。在那,你可以设置
有人知道更改 MVC 网格的 Telerik 扩展的高度的方法吗?除了使用 手动覆盖样式之外 div#MyGrid .t-grid-content { height: 100px !impor
我在我的 ASP.NET MVC 3 razor 应用程序中使用最新版本的 Telerik MVC 扩展。我还下载了最新版本的 jQuery。 我的 jQuery 文件与 Visual Studio
Telerik's Wiki 中似乎没有任何关于通过用于 MVC 的 Telerik Grid 的客户端 API 进行分组的文档。并且 Google 结果没有提供任何特定于客户端 api 和通过 ja
我是一名优秀的程序员,十分优秀!