2016-05-09 4 views
0

Я изучаю и пытаюсь найти способ экспорта определенных данных в таблицу Excel.Экспорт в Excel с помощью Predicate Builder

Найденные мной сайты похожи на this, где они возвращают каждую запись в базе данных.

В моем веб-приложении у меня есть представление, которое возвращает все записи в базе данных, но я также использую Predicate Builder, чтобы пользователь мог сортировать записи по их конкретным параметрам. Пользователь, который будет использовать это приложение, будет иметь использование/интерес для экспорта каждой записи в Excel.

Итак, мой вопрос заключается в том, как объединить параметры (предикат) с методом, который экспортирует в Excel?

У меня нет кода для показа, потому что я не нашел примеров в своих исследованиях, чтобы предоставить мне основание для того, как объединить параметры с экспортом в excel.

ответ

1

Я не использую PredicateBuilder в своем коде, но я сделал пример, используя его. Может быть, вам нужно что-то приспособить.

public ActionResult Export(string PatientName, string BirthDate, string Gender, string PatientType) 
    { 
     ViewBag.PatientName = PatientName ?? ""; 
     ViewBag.BirthDate = BirthDate ?? ""; 
     ViewBag.Gender = Gender ?? ""; 
     ViewBag.PatientType = PatientType ?? ""; 

     var predicate = PredicateBuilder.True<Patient>(); 

     if (!string.IsNullOrEmpty(PatientName)) 
     { 
      predicate = predicate.And(i => i.FirstName.ToLower().StartsWith(PatientName) || i.LastName.ToLower().StartsWith(PatientName)); 
     } 

     if (!string.IsNullOrEmpty(Gender)) 
     { 
      int gender; 
      Int32.TryParse(Gender, out gender); 
      predicate = predicate.And(i => i.Gender == gender); 
     } 
     if (!string.IsNullOrEmpty(PatientType)) 
     { 
      int type; 
      Int32.TryParse(PatientType, out type); 
      predicate = predicate.And(i => i.PatientType == type); 
     } 

     if (!string.IsNullOrEmpty(BirthDate)) 
     { 
      DateTime dob; 
      DateTime.TryParse(BirthDate, out dob); 
      predicate = predicate.And(i => EntityFunctions.TruncateTime(i.BirthDate) == EntityFunctions.TruncateTime(dob)); 
     } 

     var patients = db.Patients.Where(predicate).Select(i => i).Include(p => p.DropDownOption).Include(p => p.DropDownOption1); 

     GridView gv = new GridView(); 
     gv.DataSource = patients.ToList(); 
     gv.DataBind(); 
     Response.ClearContent(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", "attachment; filename=IbiliPasswords.xls"); 
     Response.ContentType = "application/ms-excel"; 
     Response.Charset = ""; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     gv.RenderControl(htw); 
     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 

     return RedirectToAction("Index"); 
    } 

Index.cshtml:

@Html.ActionLink("Export Info", "Export", new { PatientName = ViewBag.PatientName, BirthDate= ViewBag.BirthDate, Gender= ViewBag.Gender, PatientType= ViewBag.PatientType}) 

Надеется, что это помогает.

+0

как выясняется .. в моем * predicate builder * Я хранили параметры, которые пользователь использовал для сортировки базы данных в 'Session', поэтому все, что я делал с тем, что вы мне дали, это изменение' gv .DataSource = Session ["MySessionName"]; '.. Мне не нужны параметры в результате действия или ViewBags –

Смежные вопросы