【问题标题】:kendo ui grid for mvc read from viewbag从 viewbag 读取的 mvc 的 kendo ui 网格
【发布时间】:2016-03-09 16:15:48
【问题描述】:

我有一个控制器,它通过 Viewbag 返回强类型视图和动态 sql 过程数据表的结果。我正在尝试将网格绑定到视图中的 Viewbag 数据,但我不知道该怎么做。

@(Html.Kendo().Grid(ViewBag.Rev)
    .Name("RevGrid")
    .Pageable()
    .Sortable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .ServerOperation(false)

     ))



public ActionResult Index()
    {
        using (DataContext db = new DataContext())
        {
            var spring = db.SpringTrainings.ToList();
            ViewData["Rev"] = Revenue();
            return View(spring);
        }
    }

这是数据表的来源:

    public DataTable Revenue()
    {
        using (var conn = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
        {
            using (var commandproc = conn.CreateCommand())
            {
                commandproc.CommandType = System.Data.CommandType.StoredProcedure;
                commandproc.CommandText = "stTicketRevenue";
                conn.Open();
                {
                    var dataTable = new DataTable();
                    var dataReader = commandproc.ExecuteReader();
                    dataTable.Load(dataReader);
                    ViewBag.Proc = dataTable;
                    conn.Close();
                   return dataTable;
                }


            }
        }

    }

我非常感谢您对此的帮助。我什至不确定这是从控制器传递数据表的正确方法。

【问题讨论】:

    标签: c# model-view-controller kendo-ui


    【解决方案1】:
    @(Html.Kendo().Grid(ViewBag.Rev as System.Data.DataTable)
    .Name("RevGrid")
    .Pageable()
    .Sortable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .ServerOperation(false)
    
     ))
    

    (或)

    @(Html.Kendo().Grid(ViewData["Rev"] as System.Data.DataTable)
    .Name("RevGrid")
    .Pageable()
    .Sortable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(20)
        .ServerOperation(false)
    
     ))
    

    如果不将 ViewBag 或 ViewData 转换为 DataTable 或 List,则会出错。 Err -> 不能使用 lambda 表达式作为动态分派操作的参数,除非先将其转换为委托或表达式树类型

    与其使用 ViewBag 或 ViewData,不如使用 Kendo 读取操作从 db 中获取数据。这样页面加载速度会非常快,一旦页面加载给用户,剑道网格就会进行 ajax 调用以将数据绑定到其中。

    @(Html.Kendo().Grid(new List<UI.Models.TestViewModel>())
                .Name("RevGrid")
                .Pageable()
                .Sortable()
                .Filterable()
                .DataSource(dataSource => dataSource
                    .Ajax()
                .Read(read => read.Action("GetDataTableAction", "ControllerName"))
                    .PageSize(20)
                    .ServerOperation(false)
    
     ))
    

    控制器方法看起来像

    public ActionResult GetDataTableAction([DataSourceRequest] DataSourceRequest request)
        {
            List<Model> model = new List<Model>();
            DataSourceResult result = model.ToDataSourceResult(request);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      相关资源
      最近更新 更多