2 votes

Écrire un générique avec chaînage au lieu de colonnes de grille

J'ai des colonnes dans mon script comme suit :

  $("#grid").kendoGrid({
              height: 400,
              columns: [
                 "ProductName", 
                 { field: "UnitPrice", format: "{0:c}", width: "150px" },
                 { field: "UnitsInStock", width: "150px" },
                 { field: "Discontinued", width: "100px" },
                 { command: "destroy", title: "Delete", width: "110px" }
              ]
  });

Je veux écrire une méthode d'extension utilisant le générique et le chaînage j'ai besoin de quelque chose comme ceci en c# :

   <% Page.Grid()
     .Columns.Add(c=> {
       c.add("ProductName").Title("Product Name");
       c.add("UnitPrice").Title("Unit Price").Width("150px");
     }).Render(); %>

comment puis-je écrire une méthode d'extension c# pour cela j'ai besoin d'utiliser cette méthode dans un formulaire asp.net.

0voto

kamiar3001 Points 1137

J'ai enfin trouvé ma propre réponse :

Kend._2013.Extension.KendoGrid.Name("KendoGrid1")
                                          .Columns(c => new Kend._2013.Extension.Column[]
                                          {                                                                                   
                                                c.Add("ProductID").Title("ID").Width(100),
                                                c.Add("ProductName").Title("Name").Width(150),
                                                c.Add("UnitPrice").Title("Price").Width(150),
                                                c.Add("Discontinued").Title("Amount").Width(150),
                                                c.Add("UnitsInStock").Title("Units In").Width(150),                                           
                                          });

    namespace Kend._2013.Extension
{
    public class Column
    {
        private string fieldName;
        private string title;
        private int width;
        private int height;

        private readonly Column previous;
    private Column(Column previous)
    {
        this.previous = previous;
    }

    public Column Add(string name)
    {
        this.fieldName = name;
        return new Column(this);
    }

    public Column Title(string t)
    {
        this.title = t;
        return new Column(this);
    }

    public Column Width(int w)
    {
        this.width = w;
        return new Column(this);
    }

    public Column Height(int h)
    {
        this.height = h;
        return new Column(this);
    }
}

public class KendoGridDataSource
{
}

public class KendoGrid
{
    private readonly T target;
    private readonly KendoGrid previous;

    private KendoGrid(T target, KendoGrid previous)
    {
        this.target = target;
        this.previous = previous;
    }

    public static KendoGrid Name(T target)
    {
        return new KendoGrid(target, null);
    }

    private bool isFitInPage;
    private int height;
    private int width;
    private Column columns;
    private bool pageable;
    private bool sortable;
    private bool filterable;
    private bool editable;
    private string uICulture;
    private bool showContextMenu;
    private bool showFilterMenu;
    private bool showGroupArea;
    private bool showToolbars;
    private KendoGridDataSource DataSource;
    private bool DataBatching;

    private void FitToPage(bool b)
    {
        this.isFitInPage = b;
    }
    public KendoGrid Height(int h)
    {
        this.height = h;
        return new KendoGrid(target, this);
    }
    public KendoGrid Width(int w)
    {
        this.width = w;
        return new KendoGrid(target, this);
    }
    public KendoGrid Pageable(bool pageable)
    {
        this.pageable = pageable;
        return new KendoGrid(target, this);
    }
    public KendoGrid Sortable(bool sortable)
    {
        this.sortable = sortable;
        return new KendoGrid(target, this);
    }
    public KendoGrid Filterable(bool filterable)
    {
        this.filterable = filterable;
        return new KendoGrid(target, this);
    }
    public KendoGrid Editable(bool editable)
    {
        this.editable = editable;
        return new KendoGrid(target, this);
    }
    public KendoGrid ShowContextMenu(bool show)
    {
        this.showContextMenu = show;
        return new KendoGrid(target, this);
    }
    public KendoGrid ShowFilterMenu(bool show)
    {
        this.showFilterMenu = show;
        return new KendoGrid(target, this);
    }
    public KendoGrid ShowGroupArea(bool show)
    {
        this.showGroupArea = show;
        return new KendoGrid(target, this);
    }
    public KendoGrid ShowToolbars(bool show)
    {
        this.showToolbars = show;
        return new KendoGrid(target, this);
    }

    public KendoGrid Columns(Expression> col)
    {           
        var a = col.Compile();
        Column c = new Column();
        a(c);
        return new KendoGrid(target, this);
    }
    public void Render(){ // write html }
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X