экспортировать файл с asp.net

Это делается путем делегирования событий. Событие будет привязываться к элементу-оболочке, но будет делегировано элементу селекторного класса. Вот как это работает.

$('.wrapper-class').on("click", '.selector-class', function() {
    // Your code here
});

Примечание:

Элемент-оболочка-оболочка может быть любым ex. документа, тела или вашей обертки. Упаковщик должен уже существовать.

1
задан Jenny From the Block 29 March 2019 в 21:08
поделиться

2 ответа

Нет необходимости писать так много if ... else if ... else if ... else if ..., чтобы получить связанные имена полей.

Лучший способ -

  1. Использовать список полей (IList<string>) в качестве параметра.
  2. А затем сгенерировать требуемый список полей по intersect.
  3. Наконец, мы могли бы использовать отражение, чтобы получить все связанные значения.

Реализация

    public IActionResult DownloadExcel(IList<string> fields)
    {
        // get the required field list
        var userType = typeof(UserTable);
        fields = userType.GetProperties().Select(p => p.Name).Intersect(fields).ToList();

        if(fields.Count == 0){ return BadRequest(); }

        using (ExcelPackage package = new ExcelPackage())
        {
            IList<UserTable> userList = _context.UserTable.ToList();
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("DbTableName");

            // generate header line
            for(var i= 0; i< fields.Count; i++ ){
                var fieldName = fields[i];
                var pi= userType.GetProperty(fieldName);
                var displayName =  pi.GetCustomAttribute<DisplayNameAttribute>()?.DisplayName;
                worksheet.Cells[1,i+1].Value = string.IsNullOrEmpty(displayName ) ? fieldName : displayName ;
            }

            // generate row lines
            int totalUserRows = userList.Count();
            for(var r=0; r< userList.Count(); r++){
                var row = userList[r];
                for(var c=0 ; c< fields.Count;c++){
                    var fieldName = fields[c];
                    var pi = userType.GetProperty(fieldName);
                    // because the first row is header 
                    worksheet.Cells[r+2, c+1].Value = pi.GetValue(row);
                }
            }
            var stream = new MemoryStream(package.GetAsByteArray());
            return new FileStreamResult(stream,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        }
    }

Вы можете настроить отображаемое имя, используя DsiplayNameAttribute :

    public class UserTable
    {
        public int Id{get;set;}

        [DisplayName("First Name")]
        public string fName { get; set; }

        [DisplayName("Last Name")]
        public string lName { get; set; }

        [DisplayName("Gender")]
        public string gender { get; set; }

    }

Это Можно добавить любые свойства по своему усмотрению без жесткого кодирования в вашем методе DownloadExcel.

Демонстрация :

при прохождении списка полей fields[0]=fName&fields[1]=lName&fields[2]=Non-Exist генерирует Excel следующим образом:

enter image description here [ 1127]

[Обновить]

Чтобы экспортировать все поля, можно предположить, что клиент не передаст параметр fields. Это означает, что когда поля равны null или fields.Count==0, мы экспортируем все поля:

    [HttpGet("download")]
    public IActionResult DownloadExcel(IList<string> fields)
    {
        // get the required field list
        var userType = typeof(UserTable);
        var pis= userType.GetProperties().Select(p => p.Name);

        if(fields?.Count >0){
            fields = pis.Intersect(fields).ToList();
        } else{
            fields = pis.ToList();
        }

        using (ExcelPackage package = new ExcelPackage()){
           ....
        }
    }

A

0
ответ дан itminus 29 March 2019 в 21:08
поделиться

Если вы хотите использовать таблицу данных, то мы можем определить, что вам нужно выбрать из таблицы данных таким образом. колонны

var xyz = from a in prod.Categories
                           where a.CatName.EndsWith("A")
                           select new { CatName=a.CatName, CatID=a.CatID, CatQty = a.CatQty};
0
ответ дан Ravi Kanth 29 March 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: