将特定数据导出到Excel

时间:2015-11-12 14:05:38

标签: c# asp.net-mvc linq export-to-excel

我想用LINQ MVC 5将数据导出到Excel。目前它工作并导出所有数据,但我想只导出特定数据 - 我通过过滤(索引控制器)选择。这就是我所拥有的:

型号:

public class Oplata
{
    public int ID { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    [Display(Name="Data")]
    public DateTime DataOplaty { get; set; }

    [DisplayFormat(DataFormatString = "{0} km")]
    [Display(Name = "Przebieg")]
    public int PrzebiegOplaty { get; set; }

    [Display(Name = "Rodzaj")]
    public RodzajOplaty RodzajOplaty { get; set; }

    [DisplayFormat(DataFormatString = "{0:c}")]
    [Display(Name = "Kwota")]
    public int KwotaOplaty { get; set; }

    [DataType(DataType.MultilineText)]
    [Display(Name = "Szczegóły")]
    public string DodatkoweInformacjeOplaty { get; set; }

    [Display(Name = "Numer rejestracyjny")]
    public string TablicaRejstracyjna { get; set; }

    public int PojazdID { get; set; }

    public virtual Pojazd Pojazd { get; set; }
}

public enum RodzajOplaty
{
   Naprawa, Przegląd, Ubezpieczenie, Olej, Inne
}

控制器:

  public ActionResult Index(string oplataTyp, string szukajRej, DateTime? fromDate, DateTime? toDate)
        {
            var oplaty = from p in db.Oplaty select p;

            // Daty
            var MinDate = (from d in db.Oplaty select d.DataOplaty).Min();
            var MaxDate = (from d in db.Oplaty select d.DataOplaty).Max();

            if (!fromDate.HasValue) fromDate = MinDate;
            if (!toDate.HasValue) toDate = DateTime.Today.AddDays(1);
            if (toDate < fromDate) toDate = fromDate.GetValueOrDefault(DateTime.Now.Date).Date.AddDays(1);
            ViewBag.fromDate = fromDate;
            ViewBag.toDate = toDate;

            oplaty = db.Oplaty.Where(c => c.DataOplaty >= fromDate && c.DataOplaty < toDate);


            // Filtrowanie danych
            var TypLista = new List<RodzajOplaty>();
            var TypWyszukaj = from d in db.Oplaty orderby d.RodzajOplaty select d.RodzajOplaty;
            TypLista.AddRange(TypWyszukaj.Distinct());
            ViewBag.oplataTyp = new SelectList(TypLista);

            RodzajOplaty RodzajOplaty;

            if (Enum.TryParse<RodzajOplaty>(oplataTyp, out RodzajOplaty))
            {
                oplaty = oplaty.Where(x => x.RodzajOplaty == RodzajOplaty);
            }

            if (!String.IsNullOrEmpty(szukajRej))
            {
                oplaty = oplaty.Where(s => s.TablicaRejstracyjna.Contains(szukajRej));
            }


            // Zliczanie opłat
            try
            {
                ViewBag.SumowanieOplat = oplaty.Sum(x => x.KwotaOplaty);
            }
            catch
            {
            }


            return View(oplaty.ToList());
        }

 public ActionResult ExportData()
        {
            GridView gv = new GridView();
            gv.DataSource = db.Oplaty.ToList();
            gv.DataBind();
            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment; filename=Raport.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");
        }

查看:

@model IEnumerable<AutoMonit.Models.Oplata>

<h2>Zestawienie opłat pojazdów</h2>
@Scripts.Render("~/bundles/jqueryui")
<script type="text/javascript">
    $(document).ready(function () {
        $(".DatePicker").datepicker({
            dateFormat: 'yyyy MM dd',
            changeMonth: true,
            changeYear: true,
            changeDay: true,
        });
    });
</script>

<p>
    @Html.ActionLink("Utwórz", "Create")
</p>

@{
    var fromDate = (DateTime)ViewBag.fromDate;
    var toDate = (DateTime)ViewBag.toDate;
}

@using (Html.BeginForm("Index", "Oplatas", FormMethod.Get))
{
    <p>
        Rodzaj oplaty: @Html.DropDownList("oplataTyp", "Wszystkie")<br />
        Numer rejestracyjny: @Html.TextBox("szukajRej") <br />
        Od: @Html.TextBox("fromDate", string.Format("{0:yyyy-MM-dd}", fromDate), new { @class = "DatePicker" })
        Do: @Html.TextBox("toDate", string.Format("{0:yyyy-MM-dd}", toDate), new { @class = "DatePicker" })
        <br />
        <input type="submit" value="Szukaj" />
    </p>
}

<br />
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.TablicaRejstracyjna)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Pojazd.Marka)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DataOplaty)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.PrzebiegOplaty)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.RodzajOplaty)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.KwotaOplaty)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DodatkoweInformacjeOplaty)
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.TablicaRejstracyjna)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Pojazd.Marka)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.DataOplaty)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PrzebiegOplaty)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.RodzajOplaty)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.KwotaOplaty)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.DodatkoweInformacjeOplaty)
            </td>
            <td>
                @Html.ActionLink("Edytuj", "Edit", new { id = item.ID }) |
                @Html.ActionLink("Szczegóły", "Details", new { id = item.ID }) |
                @Html.ActionLink("Usuń", "Delete", new { id = item.ID })
            </td>
        </tr>
    }

</table>

@if (ViewBag.SumowanieOplat != null)
{
    <hr />
    <h2>
        Suma kosztów:
        @ViewBag.SumowanieOplat zł
    </h2>
    <hr />
}
    Kliknij poniżej, aby wygenerować kompletny raport:
@using (Html.BeginForm("ExportData", "Oplatas", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <table>
        <tr><td></td><td><input type="submit" name="Export" id="Export" value="Generuj" /></td></tr>

    </table>
}

1 个答案:

答案 0 :(得分:0)

我在使用Gridviews时非常生疏,但我相信你的ExportData函数,你可以设置列可见性,例如gv.Columns(4).Visible = False

希望这有帮助!