DevExpress dxDataGrid для Blazor - ошибка «Произошло необработанное исключение в текущей цепи» - PullRequest
2 голосов
/ 26 сентября 2019

Я использую dxDataGrid для Blazor , чтобы создать проект, но при попытке добавить новую строку или изменить текущую строку возникают некоторые ошибки.

Error: There was an unhandled exception on the current circuit, so this circuit will be terminated. For more details turn on detailed exceptions in 'CircuitOptions.DetailedErrors'. 
[2019-09-26T11:13:47.533Z] Information: Connection disconnected.

И я получил эту ошибку: enter image description here

Моя первая мысль, что SignalR была отключена.но я не знаю почему или как настроить?

У кого-нибудь есть идеи?Подскажите, пожалуйста?

Я получаю новые подробности об ошибке на основе предложений Михаила.Первая ошибка появляется при первой попытке, а затем вторая ошибка при второй попытке.

Error: System.NullReferenceException: Object reference not set to an instance of an object.
Uncaught (in promise) Error: Cannot send data if the connection is not in the 'Connected' State.

Похоже, что-то не так с моим кодом. Но у меня до сих пор нет никаких идей об ошибках, поэтому я вставляю свой фрагмент кода ниже.

<DxDataGrid Id="aa" Data="@activityDtos" @ref="@grid"
            ShowFilterRow="false"
            RowRemoving="@((dataItem) => OnRowRemoving(dataItem))"
            RowUpdating="@((updatingDataItem, newValues) => OnRowUpdating(updatingDataItem, newValues))"
            RowInserting="@((newValues) => OnRowInserting(newValues))">

    <DxDataGridCommandColumn Width="150px" Context="编辑"></DxDataGridCommandColumn>

    <DxDataGridColumn Field="@nameof(ActivityDto.ActivityCode)" Caption="Activity Code"></DxDataGridColumn>

    <DxDataGridColumn Field="@nameof(ActivityDto.ActText1)" Caption="Text1"></DxDataGridColumn>

    <DxDataGridColumn Field="@nameof(ActivityDto.ActText2)" Caption="Text2"></DxDataGridColumn>

    <DxDataGridColumn Field="@nameof(ActivityDto.ActivityStatusID)" Caption="Status">
        <DisplayTemplate>
            @{
                var feild = (context as ActivityDto).ActivityStatusID == "A" ? "Active" : "Inactive";
                <label><span>@feild</span></label>
            }
        </DisplayTemplate>
        <EditTemplate>
            <DxComboBox Data="@(new List<string>() { "Active", "Inactive" })"
                        SelectedItem="@(((bool)((CellEditContext)context).CellValue) ? "Active" : "Inactive" )"
                        SelectedItemChanged="@(newCellValue => ((CellEditContext)context).OnChanged(newCellValue == "Active"))">
            </DxComboBox>
        </EditTemplate>
    </DxDataGridColumn>

    <DxDataGridColumn Caption="Default">
        <DisplayTemplate>
            @{
                var id = Guid.NewGuid().ToString();
                var isDefault = (context as ActivityDto).IsDefault;
                <input id="@id" type="checkbox" checked="@isDefault" />
            }
        </DisplayTemplate>
    </DxDataGridColumn>

</DxDataGrid>

и есть код C #.

    string ActivityCode, Text1Value, Text2Value, Status,Status1;
IQueryable<ActivityDto> activityDtos;

ActivityFormDataItem editFormData = new ActivityFormDataItem()
{
    Status = "All",
    CompanyId = 37
};

protected override async Task OnInitializedAsync()
{
    activityDtos = await ActivitiesService.ActivitiesForAsync(editFormData);
    SearchDtos = await ActivitiesService.SearchDtosForAsync();
}

async void OnRowRemoving(ActivityDto dataItem)
{
    ActivitiesService.Remove(dataItem);
    await InvokeAsync(StateHasChanged);
}

async void OnRowUpdating(ActivityDto dataItem, Dictionary<string, object> newValue)
{
    ActivitiesService.Update(dataItem, newValue);
    await InvokeAsync(StateHasChanged);
}
async void OnRowInserting(Dictionary<string, object> newValue)
{
    ActivitiesService.Insert(newValue);
    await InvokeAsync(StateHasChanged);
}

protected async Task OnAfterRenderAsync()
{
    editFormData = new ActivityFormDataItem()
    {
        Status = Status1,
        ActivityCode=ActivityCode,
        CompanyId = 37,
        Text1Value=Text1Value,
        Text2Value=Text2Value
    };
    activityDtos = await ActivitiesService.ActivitiesForAsync(editFormData);
    if (!string.IsNullOrEmpty(editFormData.Status))
        editFormData.Status = editFormData.Status == "A" ? "Active" : "Inactive";
    else
        editFormData.Status = "All";
    await InvokeAsync(StateHasChanged);
}

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Обратитесь к Произошло необработанное исключение в текущей статье статья и другие рекомендации из официального репозитория https://github.com/DevExpress/Blazor:

Если вы видите это сообщение об ошибкеили аналогичное сообщение, добавьте следующий код в метод ConfigureServices, объявленный в файле Startup.cs:

services.AddServerSideBlazor().AddCircuitOptions(options => { options.DetailedErrors = true; });

Как только вы сможете получить дополнительные сведения, соберите их все и отправьте билет в Центр поддержки DevExpress для специальной помощи.

0 голосов
/ 27 сентября 2019

Я наконец узнал, почему произошла такая ошибка с моим кодом.Существует проблема с преобразованием типов при редактировании текущей строки.

<DxComboBox Data="@(new List<string>() { "Active", "Inactive" })"
                        SelectedItem="@(((bool)((CellEditContext)context).CellValue) ? "Active" : "Inactive" )"
                        SelectedItemChanged="@(newCellValue => ((CellEditContext)context).OnChanged(newCellValue == "Active"))">
            </DxComboBox>

На самом деле, я потратил много времени из-за своего различного мышления.

...