Я использую компонент Grid в своем проекте .NET 8, который динамически настраивает, отображает и редактирует столбцы таблицы SQL. Пока что он работает впечатляюще.
На данный момент я столкнулся только с одной проблемой. Когда я иду редактировать значение, использующее Syncfusion.EJ2.Calendars.DateTimePicker, Если вам это поможет, данные для строк представляют собой public IEnumerable Data { get; набор; .
Когда я перехожу к таблице, она отображает свойство даты. Даже когда я нажимаю, чтобы отредактировать ее, вношу изменения и снимаю щелчок по ячейке, все по-прежнему хорошо. Проблема возникает, когда я нажимаю кнопку «Обновить», чтобы фактически выполнить редактирование. Действие получает дату, и я вижу, что дата смещена вперед на 6 часов. Если после обновления я обновлю страницу, я увижу добавленное время на 6 часов. Итак, если дата была 2025-12-31 00:00:00 и я ввел 2025-12-31 06:00:00, при обновлении и обновлении отображается 2025-12-31 12:00:00.
Я пытался добавить несколько вариантов serverTimezoneOffset = 0 и = 6, но это делало ситуацию еще более странной. Например, значение будет отображаться правильно, но двойной щелчок для редактирования приведет к его увеличению еще до того, как я что-нибудь напишу. Затем я снова дважды щелкаю по нему, и оно увеличивается еще раз.
Я действительно хочу, чтобы отображалась точная дата, полученная из базы данных (как сейчас), и отредактированное значение было отправлено точно так, как я набрал.
Что здесь происходит?
HTML-представление:
@section Scripts {
document.addEventListener('DOMContentLoaded', () => {
var grid = document.getElementById('Grid').ej2_instances[0];
grid.dataSource = new ej.data.DataManager({
json: grid.dataSource,
batchUrl: '@Url.Action(nameof(DataProcessingController.Batch), ControllerHelper.GetName(), new { PipelineRunId = Model.PipelineRunId })',
adaptor: new ej.data.RemoteSaveAdaptor()
});
});
function onActionComplete(args) {
if (args.requestType === 'batchsave')
toastr.success('Saved.');
if (args.requestType === 'paging')
localStorage.setItem('gridPageSize', this.pageSettings.pageSize);
}
function onActionFailure() {
toastr.error('Update failed.');
}
function onCreated() {
const savedPageSize = localStorage.getItem('gridPageSize');
if (savedPageSize)
this.pageSettings.pageSize = parseInt(savedPageSize);
}
}
Processing
@Model.IssueMessage
@foreach (var col in Model.ColumnProperties)
{
bool isPrimary = col.Name == Model.PrimaryKeyColumnName;
bool isReadOnly = isPrimary || col.Name == "PipelineRunIdentifier" || col.Name == "SourceFileName";
string editType = "defaultedit";
string? format = null;
string? type = null;
var textAlign = TextAlign.Left;
var displayAsCheckBox = false;
var validationRules = new Dictionary { { "required", !col.IsNullable } };
var editParams = new object();
if (col.DataType is "decimal" or "float" or "numeric")
{
// ... settingsvv
}
else if (col.DataType is "int" or "bigint")
{
// ... settings
}
else if (col.DataType is "bit" or "boolean")
{
// ... settings
}
else if (col.DataType is "datetime" or "datetime2" or "smalldatetime")
{
// TODO issue with date time.
editType = "datetimepickeredit";
format = "yyyy-MM-dd HH:mm:ss";
type = "date";
textAlign = TextAlign.Right;
editParams = new Syncfusion.EJ2.Calendars.DateTimePicker {
ShowClearButton = false,
Format = "yyyy-MM-dd HH:mm:ss"
};
}
else if (col.DataType is "date")
{
// ... settings
}
else if (col.DataType is "nvarchar" or "varchar" or "char" or "nchar")
{
// ... settings
}
}
Подробнее здесь: https://stackoverflow.com/questions/799 ... zone-issue