我有这个问题,我一直试图解决整个晚上,我正在为此烦恼,对不起,如果它很傻,我是一个相对较新的程序员..
它应该通过 Web API 从我的数据库中获取一些数据,并将其显示在数据网格中(使用 blazorise 的数据网格),但它只是不起作用..
代码:
@using Newtonsoft.Json;
@page "/email/inbox"
<Row>
<Column>
<Card Margin="Margin.Is4.OnY">
<CardHeader>
<CardTitle>Data Grid</CardTitle>
</CardHeader>
<CardBody>
<CardText>Combine diferent datagrid options</CardText>
</CardBody>
<CardBody>
<DataGrid TItem="Fornecedor"
Data="@dataModels"
EditMode="DataGridEditMode.Popup"
Editable="true"
Sortable="true"
Filterable="true"
ShowPager="true"
RowInserted="@OnRowInserted"
RowUpdated="@OnRowUpdated"
RowRemoved="@OnRowRemoved"
UseInternalEditing="true"
@bind-SelectedRow="@fornecedorSelecionado"
Striped="true"
Bordered="true"
Hoverable="true"
CustomFilter="@OnCustomFilter">
<DataGridAggregates>
<DataGridAggregate TItem="Fornecedor" Field="@nameof( Fornecedor.Email )" Aggregate="DataGridAggregateType.Count">
<DisplayTemplate>
@($"Total emails: {context.Value}")
</DisplayTemplate>
</DataGridAggregate>
<DataGridAggregate TItem="Fornecedor" Field="@nameof( Fornecedor.Validado )" Aggregate="DataGridAggregateType.TrueCount" />
</DataGridAggregates>
<DataGridColumns>
<DataGridCommandColumn TItem="Fornecedor" Width="170px">
<NewCommandTemplate>
<Button Color="Color.Success" Clicked="@context.Clicked">New</Button>
</NewCommandTemplate>
<EditCommandTemplate>
<Button Color="Color.Primary" Clicked="@context.Clicked">Edit</Button>
</EditCommandTemplate>
<SaveCommandTemplate>
<Button Color="Color.Primary" Clicked="@context.Clicked">Save</Button>
</SaveCommandTemplate>
<DeleteCommandTemplate>
<Button Color="Color.Danger" Clicked="@context.Clicked">Delete</Button>
</DeleteCommandTemplate>
<CancelCommandTemplate>
<Button Color="Color.Secondary" Clicked="@context.Clicked">Cancel</Button>
</CancelCommandTemplate>
<ClearFilterCommandTemplate>
<Button Color="Color.Warning" Clicked="@context.Clicked">Clear Filter</Button>
</ClearFilterCommandTemplate>
</DataGridCommandColumn>
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Id )" Caption="#" Sortable="false" Width="60px" />
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.NomeEmpresa )" Caption="Fornecedor" Editable="true">
<FilterTemplate>
<TextEdit Placeholder="Search name" TextChanged="@(v=>context.TriggerFilterChange(v))" />
</FilterTemplate>
</DataGridColumn>
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.NomeContato )" Caption="Contato" Editable="true" />
<DataGridDateColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Telefone )" DisplayFormat="{(00)00000-0000}" Caption="Telefone" Editable="true" />
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Email )" Caption="Email" Editable="true" />
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.CEP )" Caption="CEP" Editable="true" />
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Cidade )" Caption="Cidade" Editable="true">
<FilterTemplate>
<Select TValue="string" SelectedValueChanged="@(e => context.TriggerFilterChange(e == "*" ? "" : e.ToString()))">
<SelectItem Value="@("*")">All</SelectItem>
@foreach (var item in dataModels)
{
<SelectItem Value="@item.Cidade">@item.Cidade</SelectItem>
}
</Select>
</FilterTemplate>
</DataGridColumn>
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Endereco )" Caption="Endereço" Editable="true" Filterable="false" />
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Servico )" Caption="Serviço" Editable="true" />
<DataGridColumn TItem="Fornecedor" Field="@nameof( Fornecedor.Especialidade )" Caption="Especialidades" Editable="true" />
<DataGridCheckColumn TItem="Fornecedor" Field="@nameof(Fornecedor.Validado)" Caption="Validado" Editable="true" Filterable="false">
<DisplayTemplate>
<Check TValue="bool?" Checked="context.Validado" Disabled="true" ReadOnly="true" />
</DisplayTemplate>
</DataGridCheckColumn>
</DataGridColumns>
</DataGrid>
</CardBody>
</Card>
</Column>
</Row>
<Row>
<Column>
<Card>
<CardHeader>
<CardTitle>Fornecedor Selecionado</CardTitle>
</CardHeader>
<CardBody>
<Fields>
<Field>
<FieldLabel>Fornecedor</FieldLabel>
<FieldBody>
<TextEdit ReadOnly="true" Text="@fornecedorSelecionado?.NomeEmpresa"></TextEdit>
</FieldBody>
</Field>
<Field>
<FieldLabel>Contato</FieldLabel>
<TextEdit ReadOnly="true" Text="@fornecedorSelecionado?.NomeContato"></TextEdit>
</Field>
</Fields>
<Fields>
<Field>
<FieldLabel>Telefone</FieldLabel>
<FieldBody>
<NumericEdit TValue="int" ReadOnly="true" Text="@fornecedorSelecionado?.Telefone"></NumericEdit>
</FieldBody>
</Field>
<Field>
<FieldLabel>Email</FieldLabel>
<TextEdit ReadOnly="true" Text="@fornecedorSelecionado?.Email"></TextEdit>
</Field>
</Fields>
</CardBody>
</Card>
</Column>
</Row>
@code{
public class DataService
{
HttpClient client = new HttpClient();
public async Task<List<Fornecedor>> GetUsuariosAsync()
{
try
{
string url = "https://myAPI.azurewebsites.net/Api/Fornecedores";
var response = await client.GetStringAsync(url);
var fornecedores = JsonConvert.DeserializeObject<List<Fornecedor>>(response);
return fornecedores;
}
catch (Exception ex)
{
throw ex;
}
}
}
DataGridEditMode editMode = DataGridEditMode.Popup;
bool editable = true;
bool sortable = true;
bool filterable = true;
bool showPager = true;
Fornecedor fornecedorSelecionado;
public class Fornecedor
{
public int Id { get; set; }
public string NomeEmpresa { get; set; }
public string NomeContato { get; set; }
public int Telefone { get; set; }
public string Email { get; set; }
public int CEP { get; set; }
public string Cidade { get; set; }
public string Endereco { get; set; }
public string Servico { get; set; }
public string Especialidade { get; set; }
public string Especialidade_dois { get; set; }
public string Especialidade_tres { get; set; }
public string Website { get; set; }
public bool? Validado { get; set; }
}
DataService dataService;
protected async Task FornecedoresAPI()
{
try
{
await dataService.GetUsuariosAsync();
}
catch (Exception ex)
{
throw ex;
}
}
List<Fornecedor> dataModels;
// generated with https://mockaroo.com/
protected override async Task OnInitializedAsync()
{
dataService = new DataService();
dataModels = await dataService.GetUsuariosAsync();
}
string customFilterValue;
bool OnCustomFilter(Fornecedor model)
{
if (string.IsNullOrEmpty(customFilterValue))
return true;
return
model.NomeEmpresa?.Contains(customFilterValue, StringComparison.OrdinalIgnoreCase) == true
|| model.NomeContato?.Contains(customFilterValue, StringComparison.OrdinalIgnoreCase) == true
|| model.Email?.Contains(customFilterValue, StringComparison.OrdinalIgnoreCase) == true;
}
}
我收到此错误:
ArgumentNullException:值不能为空。(参数“来源”)
System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument 参数) System.Linq.Enumerable.Count(IEnumerable 源,Func 谓词)
Blazorise.DataGrid._DataGridAggregateRow.CountOf(DataGridColumn 列)
Blazorise.DataGrid._DataGridAggregateRow.Calculate(DataGridAggregate 列)
ViewFeatures.ComponentRenderer.RenderComponentAsync(ViewContext viewContext, Type componentType, RenderMode renderMode, object parameters) Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper.ProcessAsync(TagHelperContext context, TagHelperOutput output) Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.g__Awaited| 0_0(任务任务,TagHelperExecutionContext executionContext,int i,int count)Revvi.Pages.Pages__Host.b__14_1() in _Host.cshtml + Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync() Revvi.Pages.Pages__Host.ExecuteAsync () 在 _Host.cshtml + 布局 = null; Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage 页面,ViewContext 上下文) Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage 页面,ViewContext 上下文,
而且我完全不知道该怎么做..