데이터 열 중 하나가 DateTimeOffset
인 데이터를 표시하려면 GridView
을 사용하고 있습니다. 사용자의 시간대에 날짜 & 번을 표시하기 위해 사용자의 시간대 환경 설정을 자신의 프로필 (속성 값 키 "TimezoneOffset")에 저장하고 날짜를 & 번 포맷 할 때이 설정에 액세스해야합니다. 내가 templatefield 사용한다면사용자 정의 템플릿과 같은 DataControlField를 작성하는 방법
, 나는 쓸 필요가 : 너무 복잡하고 재사용하지
<abbr class="datetimeoffset">
<%#
((DateTimeOffset)Eval("CreatedDate"))
.ToOffset(new TimeSpan(-((Int32)Profile.GetPropertyValue("TimezoneOffset"))
.ToRepresentativeInRange(-12, 24), 0, 0)).ToString("f") %>
</abbr>
합니다.
코드 숨김에 (적어도 데이터 바인딩 식 밖으로 이동하기 위해) 속성을 추가하려고 시도했지만 분명히보기의 코드 숨김의 속성에 <%# ... %>
내에서 액세스 할 수 없습니다.
따라서 사용자 정의 시간대에 & 번을 서식 지정하려면 사용자 지정 DataControlField
을 작성해야한다고 생각합니다.
나는 시작했다 :
public class DateTimeOffsetField : DataControlField
{
private TimeSpan userOffsetTimeSpan;
protected override DataControlField CreateField()
{
return new DateTimeOffsetField();
}
protected override void CopyProperties(DataControlField newField)
{
base.CopyProperties(newField);
((DateTimeOffsetField)newField).userOffsetTimeSpan = userOffsetTimeSpan;
}
public override bool Initialize(bool sortingEnabled, System.Web.UI.Control control)
{
bool ret = base.Initialize(sortingEnabled, control);
int timezoneOffset = ((Int32)HttpContext.Current.Profile.GetPropertyValue("TimezoneOffset")).ToRepresentativeInRange(-12, 24);
userOffsetTimeSpan = new TimeSpan(-timezoneOffset, 0, 0);
return ret;
}
}
하지만 지금은 붙어입니다. 각 셀에 대해 HTML <abbr class="datetimeoffset"><%# ((DateTimeOffset)Eval("CreatedDate")).ToOffset(userOffsetTimeSpan).ToString("f") %></abbr>
을 출력하려면 어떻게합니까?
편집 : 나는 Cutting Edge: Custom Data Control Fields이라는 제목의 기사를 읽었습니다.
public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
{
base.InitializeCell(cell, cellType, rowState, rowIndex);
if (cellType == DataControlCellType.DataCell)
{
InitializeDataCell(cell, rowState, rowIndex);
}
}
protected virtual void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState, int rowIndex)
{
System.Web.UI.Control control = cell;
if (control != null && Visible)
{
control.DataBinding += new EventHandler(OnBindingField);
}
}
protected virtual void OnBindingField(object sender, EventArgs e)
{
var target = (System.Web.UI.Control)sender;
if (target is TableCell)
{
TableCell tc = (TableCell)target;
}
}
을하지만 기사가 TableCell
인스턴스의 Text
속성을 설정하는 반면, 나는 테이블 셀에 부분 뷰를 렌더링하는 싶습니다 지금까지 나는 추가했습니다. 그게 가능하니?