У меня есть viewmodel, где свойства имеют отображаемые имена. Теперь я делаю лист Excel с теми же данными, что и сетка на веб-странице. Я использую closed xml (с использованием openxml), чтобы создать Excelsheet на сервере и отправить его веб-клиенту, когда они хотят загрузить данные в формате Excel. Когда я пишу строку заголовка в потоке Excel openxml, я хочу повторно использовать отображаемое имя, которое я уже определил. Но я не могу понять, что нужно. Ниже приведен пример отображаемого имени. (Для примера я использую только два, реальность есть много много больше столбцов):Как получить доступ к System.ComponentModel.DataAnnotations Свойство отображаемого имени для поля
using System.ComponentModel.DataAnnotations;
public class DCArrival : IDCArrival
{
[Display(Name = "Via Transit")]
public String LocationType { get; set; }
[Display(Name = "Currency")]
String CurrencyISOCode { get; }
}
Тогда я хочу, чтобы использовать эту DisplayName, когда я создаю строку заголовка. Марк псевдокод, что tryes, чтобы объяснить, что я хочу, чтобы разжиться:
private MemoryStream CreateExcelFile(ICollection<DCArrival> dcArrToShow
, QueryStrInput queryStrInput)
{
try
{
// Create an Excel Workbook
XLWorkbook wb = new XLWorkbook();
// Add the worksheet with data
IXLWorksheet ws = wb.Worksheets.Add("New Worksheet");
// Add my data that was displayed in the html table ...
ws.Cell(1, 1).SetValue("Hello World");
//Add Header row. By taking a object in the collection and figure out its
// display name
DCArrival firstRow = dcArrToShow.First();
// Here comes my problem. Here is my dream up mockup code
ws.Cell(2,1).Value = firstRow.LocationType.DisplayAttribute.GetName()
ws.Cell(2,2).Value = firstRow.CurrencyISOCode.DisplayAttribute.GetName()
// back to reality
//this is how easy I can get all data from Collection
ws.Cell(3, 1).Value = dcArrToShow.AsEnumerable();
// All done
MemoryStream ms = new MemoryStream();
wb.SaveAs(ms);
return ms;
}
catch (Exception e)
{
string errmsg = String.Format("Failed to create Excel file: {0}",
e.Message);
throw new Exception(errmsg, e);
}
Я посмотрел на http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayattribute.aspx Но я не понимаю, как я ухватить его. Я понимаю, что это волшебство исправлено для вас, когда вы используете обычный рендеринг mvc 3 html. Когда я нагуглить эти понятия я утонуть в блогах, кто хочет, чтобы объяснить основные проверки в MVC 3.
смотрите по этой ссылке [Как я могу получить доступ к DisplayName данных значений аннотаций фр Код ом] [1] [1]: http://stackoverflow.com/questions/3485737/how-can-i-access-the-displayname-data-annotation-value-from-code – MikMark