FineUIMvc隨筆(1)動態創建表格列


聲明:FineUIMvc(基礎版)是免費軟件,本系列文章適用於基礎版。

 

《FineUIMvc隨筆》目錄

FineUIMvc隨筆(1)動態創建表格列

FineUIMvc隨筆(2)怎樣在控件中嵌套 HTML

FineUIMvc隨筆(3)不能忘卻的回發(__doPostBack)

FineUIMvc隨筆(4)自定義回發參數與自定義回發

FineUIMvc隨筆(5)UIHelper是個什么梗?

FineUIMvc隨筆(6)對比WebForms和MVC中表格的數據庫分頁

FineUIMvc隨筆(7)擴展通知對話框(顯示多個不重疊)

...

 

 

 

 

 

用戶需求

 

用戶希望實現動態創建表格列,在 WebForms 中,我們通過在 Page_Init 中創建列來實現:

 

但是在 MVC 中,如果還想着 WebForms 的那一套,想着怎么才能在 Controller 中訪問 View 中的表格控件,這是行不通的。

 

我曾寫過一個系列文章《ASP.NET MVC快速入門(MVC5+EF6)》,開篇就講到了 MVC 中的頁面的生成流程:

這個頁面之所以能夠呈現在我們眼前,經歷了三個主要流程:

  1. MVC的路由引擎根據URL查找相應的控制器(HomeController.cs)。
  2. 控制器的操作方法About准備數據,然后傳入視圖Home/About.cshtml。
  3. 視圖准備HTML片段,放入布局頁面並返回瀏覽器。

 

控制器准備數據,傳入視圖,然后視圖才開始渲染頁面。也就是說控制器執行時,對視圖的內容一無所知。理解這一點很重要。

 

動態創建表格列

當然在 MVC 中實現動態創建表格列也不難,我們需要將表格列數據(GridColumn[])像表格數據源一樣傳遞給視圖即可。

 

控制器:

// GET: Grid/DynamicColumns
public ActionResult Index()
{
    InitGridColumns();

    return View(DataSourceUtil.GetDataTable());
}

private void InitGridColumns()
{
    List<GridColumn> columns = new List<GridColumn>();

    RenderField field = null;

    columns.Add(new RowNumberField());

    field = new RenderField();
    field.HeaderText = "性別";
    field.DataField = "Gender";
    field.FieldType = FieldType.Int;
    field.RendererFunction = "renderGender";
    field.Width = 80;
    columns.Add(field);

    field = new RenderField();
    field.HeaderText = "入學年份";
    field.DataField = "EntranceYear";
    field.FieldType = FieldType.Int;
    field.Width = 100;
    columns.Add(field);

    RenderCheckField checkfield = new RenderCheckField();
    checkfield.HeaderText = "是否在校";
    checkfield.DataField = "AtSchool";
    checkfield.RenderAsStaticField = true;
    checkfield.Width = 100;
    columns.Add(checkfield);

    // ...

    ViewBag.Grid1Columns = columns.ToArray();
}

 

在控制器中,動態創建 List<GridColumn> 對象,並保存到 ViewBag.Grid1Columns。

實際項目中,這一步可能需要和數據庫交互,來獲取需要動態創建的表格列。

 

視圖:

@{
    ViewBag.Title = "Grid/Grid";
    var F = @Html.F();
}

@model System.Data.DataTable

@section body {

    @(F.Grid()
        .EnableCollapse(true)
        .Width(850)
        .Title("表格(動態創建列)")
        .ShowHeader(true)
        .ShowBorder(true)
        .ID("Grid1")
        .DataIDField("Id")
        .DataTextField("Name")
        .Columns(ViewBag.Grid1Columns)
        .DataSource(Model)
    )
    <br>
    <br>

    @(F.Button()
        .Text("選中了哪些行")
        .ID("Button1")
        .Listener("click", "notifySelectedRows('Grid1');")
    )

}

 

頁面效果:

 

小結

本篇文章介紹了 WebForms 和 MVC 中動態創建表格列的方法。通過對比,也希望大家能充分了解兩種框架的重要區別。

 

如果你剛開始接觸 MVC,建議先從三石的系列教程開始:http://www.cnblogs.com/sanshi/p/6210695.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM