0

1 つの回答済みの質問記事を使用して 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;
   }

結果は次のとおりです。

ここに画像の説明を入力

しかし、すべての行は葯と同じです!結果は以下でなければなりません: ここに画像の説明を入力 私の sql クエリは正常に動作しています。問題ありません。私の繰り返しの行は最後の行です。この奇妙な問題を解決する方法。

4

1 に答える 1

1
dynamic expando = new ExpandoObject();

インスタンスを1 つ だけ作成します。 この同じインスタンスを行ごとに 1 回リストに追加し、そのたびにプロパティを上書きします。ExpandoObject

new行ごとにインスタンスを作成する必要があります。

于 2012-07-04T13:01:40.040 に答える