2016-03-24 5 views
0

Ich habe ein Kendo-MVC-Gitter.MVC Kendo Grid Multiselect-Spalte

Ich möchte eine der Spalten eine Liste ein Werte sein.

Zum Beispiel meines Datenobjekt:

public TestObject() 
{ 
    public int TestID {get; set;} 
    public string MyTest {get; set;} 
    public string MyCategory {get; set;} 
    public string Description {get; set;} 
} 

Kendo Grid:

@(Html.Kendo().Grid<MyProject.BusinessObjects.TestObject>() 
     .Name("myGrid") 
     .Columns(col => 
     { 
      col.Bound(x => x.TestID); 
      col.Bound(x => x.MyTest); 
      col.Bound(x => x.MyCategory); 
      col.Bound(x => x.Description); 
      col.Command(x => { x.Edit(); x.Destroy(); }); 
     }) 
     .Selectable() 
     .Scrollable() 
     .ToolBar(x => x.Create()) 
     .Sortable() 
     .Editable(e => e.Mode(GridEditMode.PopUp)) 
     .Pageable(p => p 
      .Refresh(true) 
      .PageSizes(true) 
      .ButtonCount(5)) 
     .DataSource(d => d 
      .Ajax() 
      .Read(r => r.Action("GetData", "MyController")) 
      .PageSize(20) 
      .Model(m => 
      { 
       m.Id(x => x.TestID);      
      })  
      .Update("UpdateData", "MyController") 
      .Create("CreateData", "MyController") 
      .Destroy("DeleteData", "MyController") 
     ) 
    ) 

Jetzt, wenn der Benutzer einen Datensatz hinzuzufügen oder zu ändern, geht ich die myCategory eine Liste der gültigen Werte angezeigt werden soll. (Grundsätzlich ist MyCategory ein FK, wird aber nicht so in der DB erzwungen)

Wie kann ich dies mit dem Kendo Grid erreichen? Ich habe versucht, dem Online-Beispiel von Kendo zu folgen, aber ich vermisse die Verbindung, wenn sie ein ViewState-Objekt erstellen und wie das Gitter mit diesem bestimmten Objekt interagiert.
(Kendo Grid Bearbeiten benutzerdefinierter Editor Beispiel)

Antwort

0

Es muss nicht fk in DB sein.

columns.ForeignKey(p => p.MyCategory, (System.Collections.IEnumerable)ViewData["MyCategory"], "Id", "MyCategoryText"); 

und in der Controller-Indexseite müssen Sie die Viewdaten auffüllen. Sie können die Daten von der DB beziehen oder die Werte auch fest codieren.

public ActionResult Index() 
    {    
     ViewData["MyCategory"] = GetMyCategoryList(); 
     return View(); 
    } 

public List<SelectListItem> GetMyCategoryList() 
    { 
     List<SelectListItem> lstMyCategory = new List<SelectListItem>(); 
     var data = new[]{ 
      new SelectListItem{ Id=1,MyCategoryText="Federal"}, 
      new SelectListItem{ Id=2,MyCategoryText="General"}, 
      new SelectListItem{ Id=3,MyCategoryText="Cash"},     
     }; 
     lstMyCategory = data.ToList(); 
     return lstMyCategory; 
    } 
+0

Das erreicht fast das, was ich tun möchte. Es erzwingt die Daten, so dass der Benutzer eine Rouge-Kategorie nicht speichern kann. Aber vom Add/Edit möchte ich, dass das Kategoriefeld ein Dropdown dieser Werte ist, wie im Kendo Beispiel. – PrivateJoker