I have a class like...
public class IndexBase<T> : ComponentBase
inside that class is a class which has this code...
public class DataGridPageSetting
{
public DataGridSearchFilter DataGridSearchFilter { get; set; } = new DataGridSearchFilter();
public DataGridSettings? DataGridSettings { get; set; }
}
public class DataGridPageSetting<T> where T : class, new()
{
public DataGridSearchFilter DataGridSearchFilter { get; set; } = new DataGridSearchFilter();
public DataGridSettings? DataGridSettings { get; set; }
public T AdditionalSettings { get; set; } = new T();
}
I can create DataGridPageSetting easily enough but I need to create DataGridPageSetting with T in this class. I can't do that because I am inheriting from ComponentBase...
Abbreviated version of full code...
public class IndexBase<T> : ComponentBase
{
[Inject]
public NavigationManager NavigationManager { get; set; } = default!;
[Inject]
public ILocalStorageService LocalStorageService { get; set; } = default!;
public string ODataQuerySerialized { get; set; } = String.Empty;
public string GridFilter { get; set; } = string.Empty;
//Datagrid
public IEnumerable<T>? GridData { get; set; }
public SpDataGrid<T> Grid { get; set; } = default!;
public DataGridPageSetting DataGridPageSetting { get; set; } = new DataGridPageSetting();
public int[] PageSizeOptions { get; set; } = new int[] { 10, 25, 50, 100 };
public int Count { get; set; }
public bool IsLoading { get; set; }
public bool GridStateLoaded { get; set; } = false;
public string ErrorMessage { get; set; } = "";
public bool EnableExport = true;
public bool Busy { get; set; } = false;
public DataGridSettings? Settings
{
get
{
return DataGridPageSetting.DataGridSettings;
}
set
{
if (DataGridPageSetting.DataGridSettings != value)
{
DataGridPageSetting.DataGridSettings = value;
InvokeAsync(SaveStateAsync);
}
}
}
public async Task GridOnAfterRenderAsync(bool firstRender)
{
if (firstRender || !GridStateLoaded)
{
GridStateLoaded = true;
await LoadStateAsync();
await Grid.Reload();
}
}
public virtual async Task SaveStateAsync()
{
var appName = Assembly.GetExecutingAssembly().GetName().Name;
var pageName = NavigationManager.Uri.Substring(NavigationManager.BaseUri.Length);
await LocalStorageService.SetItemAsync<DataGridPageSetting>($"{appName}_{TenantInfo!.TenantId}_{pageName.ToUpper()}_SettingsLoadData", DataGridPageSetting);
}
public virtual async Task LoadStateAsync()
{
var appName = Assembly.GetExecutingAssembly().GetName().Name;
var pageName = NavigationManager.Uri.Substring(NavigationManager.BaseUri.Length);
var pageSettings = await LocalStorageService.GetItemAsync<DataGridPageSetting>($"{appName}_{TenantInfo!.TenantId}_{pageName.ToUpper()}_SettingsLoadData");
if (pageSettings != null)
{
DataGridPageSetting = pageSettings;
}
}
/// <remarks>
/// The below syntax is used to create the string for custom filtering, see AuditLogIndex for example
/// var oDataParameterizer = new ODataParameterizer();
///var customFilter = oDataParameterizer.Parameterize("RequestDateTime ge @StartDate and RequestDateTime le @EndDate",
/// new
/// {
/// StartDate = dataGridPageSetting.AdditionalSettings.StartDate,
/// EndDate = dataGridPageSetting.AdditionalSettings.EndDate.AddDays(1).AddMilliseconds(-1)
/// });
/// </remarks>
public string BuildODataFilter(string? customFilter = null)
{
var filter = "";
if (!string.IsNullOrWhiteSpace(customFilter))
{
filter = $"({customFilter})";
}
if (!string.IsNullOrWhiteSpace(DataGridPageSetting.DataGridSearchFilter.SearchFilter))
{
if (!string.IsNullOrWhiteSpace(filter))
{
filter += " and ";
}
filter += $"({DataGridPageSetting.DataGridSearchFilter.SearchFilter})";
}
if (!string.IsNullOrWhiteSpace(GridFilter))
{
if (!string.IsNullOrWhiteSpace(filter))
{
filter += " and ";
}
filter += $"({GridFilter})";
}
return string.IsNullOrWhiteSpace(filter) ? "" : $"({filter})";
}
public async Task FilterSubmitHandler(string filterText)
{
DataGridPageSetting.DataGridSearchFilter.SearchValue = Filter?.SearchTerm ?? "";
DataGridPageSetting.DataGridSearchFilter.SearchFilter = filterText;
await Grid.FirstPage(forceReload: true);
await InvokeAsync(SaveStateAsync);
}
}
This is what I need, but won't work...
public class IndexBase<T, TPageSetting> : ComponentBase
{
[CascadingParameter]
public TenantInfo? TenantInfo { get; set; } = default;
[Inject]
public NavigationManager NavigationManager { get; set; } = default!;
[Inject]
public ILocalStorageService LocalStorageService { get; set; } = default!;
//DataGrid Search Filter
public SpDataGridSearchFilter<T>? Filter { get; set; } = new SpDataGridSearchFilter<T>();
public SpExcelExport<T>? Export { get; set; } = new SpExcelExport<T>();
public DataGridPageSetting<TPageSetting> DataGridPageSetting { get; set; } = new DataGridPageSetting<TPageSetting>();
public DataGridSettings? Settings
{
get
{
return DataGridPageSetting.DataGridSettings;
}
set
{
if (DataGridPageSetting.DataGridSettings != value)
{
DataGridPageSetting.DataGridSettings = value;
InvokeAsync(SaveStateAsync);
}
}
}
public virtual async Task SaveStateAsync()
{
var appName = Assembly.GetExecutingAssembly().GetName().Name;
var pageName = NavigationManager.Uri.Substring(NavigationManager.BaseUri.Length);
await LocalStorageService.SetItemAsync<DataGridPageSetting<TPageSetting>>($"{appName}_{TenantInfo!.TenantId}_{pageName.ToUpper()}_SettingsLoadData", DataGridPageSetting);
}
public virtual async Task LoadStateAsync()
{
var appName = Assembly.GetExecutingAssembly().GetName().Name;
var pageName = NavigationManager.Uri.Substring(NavigationManager.BaseUri.Length);
var pageSettings = await LocalStorageService.GetItemAsync<DataGridPageSetting<TPageSetting>>($"{appName}_{TenantInfo!.TenantId}_{pageName.ToUpper()}_SettingsLoadData");
if (pageSettings != null)
{
DataGridPageSetting = pageSettings;
}
}
Any suggestions?