2012-04-18 36 views
0

我有mvc3应用程序在这个我已经使用了两个部分视图1.controls 2.webgrid如何在MVC3中将数据保存到DataTable中?

内部控件我从实际的数据库表填充下拉列表。使用EF

在index.cshtml我有一种形式,需要从这些下拉列表中选择值,当按下插入按钮时,这些值应该去临时“DataTable”,并在webgrid中显示它...我'新手到MVC3,并不知道如何做到这一点。

Controls.cshtml 
@model Mapping.Models.SecurityIdentifierMappingViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Mapping</legend> 
     <div class="editor-label"> 
      @Html.Label("Pricing SecurityID") 
     </div> 
     <div class="editor-field"> 
      @Html.HiddenFor(model => model.MappingControls.Id) 
      @Html.DropDownListFor(model => model.MappingControls.PricingSecurityID, 
     new SelectList(Model.PricingSecurities, "Value", "Text"), 
     "Select SecurityID" 
      ) 
      @Html.ValidationMessageFor(model => model.MappingControls.PricingSecurityID) 
     </div> 
     <div class="editor-label"> 
      @Html.Label("CUSIP ID") 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownListFor(model => model.MappingControls.CUSIP, 
     new SelectList(Model.CUSIPs, "Value", "Text"), 
      "Select CUSIP" 
      ) 
      @Html.ValidationMessageFor(model => model.MappingControls.CUSIP) 
     </div> 

     <div class="editor-label"> 
      @Html.Label("Calculation") 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.MappingControls.Calculation) 
      @Html.ValidationMessageFor(model => model.MappingControls.Calculation) 
     </div> 
     <p> 
      <input id="btnsubmit" type="submit" value="Insert" /> 

     </p> 
    </fieldset> 
} 

HomeController.cs 
public class HomeController : Controller 
    { 
     // 
     // GET: /Home/ 

     mydataEntities dbContext = new mydataEntities(); 
     DataRepository objRepository = new DataRepository(); 

     //GET 

     public ActionResult Index(string userAction , int uid = 0) 
     { 
      var mappingobj = new SecurityIdentifierMappingViewModel(); 
      mappingobj.MappingWebGridList = dbContext.SecurityIdentifierMappings.ToList(); 

       mappingobj.MappingControls = new SecurityIdentifierMapping(); 
       mappingobj.MappingControls.PricingSecurityID = 0; 
       mappingobj.MappingControls.CUSIP = string.Empty; 

      mappingobj.PricingSecurities = objRepository.GetPricingSecurityID(); 
      mappingobj.CUSIPs = objRepository.GetCUSIP(); 

      return View(mappingobj); 
     } 


     //POST 

     [HttpPost] 
     public ActionResult Index(SecurityIdentifierMappingViewModel objModel) 
     { 


      if (objModel.MappingControls.Id > 0) 
      { 
       if (ModelState.IsValid) 
       { 
        dbContext.Entry(objModel.MappingControls).State = EntityState.Modified; 
        try 
        { 
         dbContext.SaveChanges(); 
         //objModel = new SecurityIdentifierMappingViewModel(); 
         //return RedirectToAction("Index", "Home"); 
        } 
        catch (System.Data.Entity.Validation.DbEntityValidationException ex) 
        { 
         throw; 
        } 
       } 

      } 

      //insert code 
      else 
      { 
       if (ModelState.IsValid) 
       { 
        dbContext.SecurityIdentifierMappings.Add(objModel.MappingControls); 
        try 
        { 
         dbContext.SaveChanges(); 
        } 
        catch (System.Data.Entity.Validation.DbEntityValidationException ex) 
        { 
         throw; 
        } 
       } 

      } 

      return RedirectToAction("Index"); 
     } 
    } 

public class SecurityIdentifierMappingViewModel 
{ 
    public IEnumerable<SecurityIdentifierMapping> MappingWebGridList { get; set; } 
    public SecurityIdentifierMapping MappingControls { get; set; } 

    public List<SelectListItem> PricingSecurities { get; set; } 
    public List<SelectListItem> CUSIPs { get; set; } 
} 

目前使用SecurityIdentifierMapping从数据库中的第3表,其中将我的表格数据...但需要将其插入到“数据表”

回答

1

您必须创建一个DataTable对象和分配适当的DataColumn反对它。之后,将SecurityIdentifierMapping属性映射到临时数据表中的列。至于将DataTable映射到WebGrid,我不会说这是不可能的,因为我从来没有亲自尝试过这个东西,但是您将不得不将它映射回SecurityIdentifierMapping的集合。

但是,为什么你需要DataTable? DataTable对IQueryable或IEnumerable有什么优势?你真正想用这种策略达到什么目的?

UPDATE:

你已经在你的ViewModel类(SecurityIndentifierMappingViewModel)使用的IEnumerable。与此同时,您在将数据存储到数据库时将数据存入索引,并在GET版本的索引中再次获取数据。

你缺少的是在你的视图中创建一个WebGrid对象。在你的索引视图某处

@{ 
    var columns = new List<string>(); 
    columns.Add("Column 1"); 
    columns.Add("Column 2"); 

    var grid = new WebGrid(model: Model.MappingWebGridList, columnNames: columns); 
} 

@grid.GetHtml() 

将上面的代码,并定义自己的列:您认为可以定义这样。另外,看看我写的这篇文章,以获得更多的想法,你可以用WebGrid http://apparch.wordpress.com/2012/01/04/webgrid-in-mvc3/做什么。

我希望我能够帮助你至少一点。

+0

我只是想将我的第三张表存储到临时的某个地方,所以我想我可以使用datatable任何其他选项?我是新的你可以告诉我怎么可以在我的情况下使用IQueryable或IEnumerable ... – Neo 2012-04-19 07:19:54

+0

我希望上述更新有帮助。 – 2012-04-19 19:39:42

相关问题