2012-07-04 55 views
0

我尝试使用一个answered questionan article来填充webgrid,但我无法重复所有行的值。所有行的值都与其他值相同。我一直在调试以解决这个奇怪的问题。但我不能:如何解决expando奇怪的行为来填充mvc3 webgrid?

public class MyViewModel 
{ 
    public IEnumerable<string> Columns { get; set; } 
    public IEnumerable<dynamic> Values { get; set; } 
    public bool HasNext { get; set; } 
    public bool HasPrevious { get; set; } 
} 

public class JobController : Controller 
{ 
    public ActionResult Index(int? page) 
    { 
     ViewData["Customers"] = new SelectList(CustomerOperation.GetCustomers().Items, "Id", "Name", null); 
     ViewData["Jobs"] = new SelectList(JobOperation.GetCustomersAssemblyList().Items, "scheduleId", "name", null); 
     const int pageSize = 10; 
     ViewBag.CurrentPage = (page ?? 0); 
     if (Session["CustomerId"]!=null && Session["ScheduleId"]!=null) 
     { 
      int customerId = ConvertUtil.ToInt(Session["CustomerId"]); 
      int scheduleId = ConvertUtil.ToInt(Session["ScheduleId"]); 
      var model = GetPagedVals((page ?? 0) * pageSize, pageSize, customerId, scheduleId); 
      ViewBag.HasPrevious = model.HasPrevious; 
      ViewBag.HasMore = model.HasNext; 

      return View(model); 
     } 
     else 
      return View(); 
    } 
public MyViewModel GetPagedVals(int skip, int take, int Id, int scheduleId) 
    { 
     Session["CustomerId"] = Id; 
     Session["ScheduleId"] = scheduleId; 
     DataTable dt = JobOperation.GetJobsBySchedulerIdAndCustomerId(scheduleId, Id); 
     List<dynamic> dataList = new List<dynamic>(); 
     dynamic expando = new ExpandoObject(); 
     var p = expando as IDictionary<String, object>; 

     IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().Select(x => x.ColumnName); 
     foreach (DataRow dr in dt.Rows) 
     { 
      foreach (string columnName in columnNames) 
      { 

       p[columnName] = ConvertUtil.ToString(dr[columnName]); 

      } 
      dataList.Add(expando); 
     } 

     var result = dataList.Skip(skip).Take(take).ToList(); 
     var model = new MyViewModel(); 
     model.Columns = columnNames; 
     model.Values = result; 
     model.HasNext = (skip + 10 < dataList.Count); 
     model.HasPrevious = (skip > 0); 
     ViewBag.HasPrevious = model.HasPrevious; 
     ViewBag.HasMore = model.HasNext; 

     return model; 
    } 

结果如下:

enter image description here

但所有行是一样的花药!结果必须如下: enter image description here 我的SQL查询工作良好。没有问题的SQL。我重复的行最后一行。如何解决这个奇怪的问题。

回答

1
dynamic expando = new ExpandoObject(); 

你永远只能创建一个ExpandoObject实例。
您可以将每个行的同一实例添加到列表中,每次覆盖这些属性。

您需要为每一行创建一个new实例。