2012-07-04 54 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實例。