속성에 표시 이름이있는 viewmodel이 있습니다. 현재 웹 페이지의 그리드와 동일한 데이터가 포함 된 엑셀 시트를 만들고 있습니다. closed xml (openxml을 사용하는)을 사용하여 엑셀 시트를 서버에 생성하고 엑셀로 데이터를 다운로드하고자 할 때 웹 클라이언트에게 보냅니다. Excel의 openxml 스트림에 헤더 행을 쓸 때 이미 정의한 displayname을 다시 사용하고 싶습니다. 그러나 나는 무엇을 부를지 알아낼 수 없다. 다음은 표시 이름의 예입니다. (I 만이 사용하는 예를 들어, 현실은 많은 더 많은 열이 있습니다) :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; }
}
그럼 내가 헤더 행을 만들 때이 표시 이름을 사용하고 싶습니다. 마크 내가 잡고 싶어하는지 설명 할 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 렌더링을 사용할 때 이것이 마술처럼 고정되어 있음을 이해합니다.
ws.Cell(2.1).Value = ModelMetadata.FromLambdaExpression<DCArrival, string>(x => x.LocationType, new ViewDataDictionary<DCArrival>(firstRow)).DisplayName;
또는 확장 메서드 쓰기 : 내가 MVC 3에서 기본적인 검증을 설명하고 싶어 내가 블로그에서 익사 얻을 이러한 개념을 구글로하면
는
내가 표시 이름 데이터 주석 값 FR에 액세스 할 수있는 방법 [이 링크를 참조 OM 코드] [1] [1] : http://stackoverflow.com/questions/3485737/how-can-i-access-the-displayname-data-annotation-value-from-code – MikMark