我正在使用DevExpress MVCxGridView实现自定义分页和绑定。
这里有演示链接;
https://demos.devexpress.com/MVCxGridViewDemos/DataBinding/AdvancedCustomBinding
现在数据本身来自api,所以例如数据的GET终点可能是;
public IHttpActionResult GetUsers(
string username = null,
string surname = null,
string postcode = null,
bool includearchived = false,
int? pagesize = null,
int? pageoffset = null)
{
var predicate = PredicateBuilder.True<Users>();
if(username != null)
predicate = predicate.And(x => x.Username.Contains(username));
if(surname != null)
predicate = predicate.And(x => x.Surname.Contains(surname));
if(postcode != null)
predicate = predicate.And(x => x.Postcode.Contains(postcode));
if (!includearchived)
predicate = predicate.And(x => x.Archived == false);
var results = _Service.GetUsers(predicate, pageoffset, pagesize);
//filter out columns which are not needed
var filtered = from x in results
select new
{
userid = x.ID,
date = x.Date,
username = x.Username
firstname = x.Firstname,
surname = x.Surname,
postcode = x.Postcode,
typeid = x.Type.ID,
usertype = x.Type.ID == 0 ? "Demo1" : "Demo2",
archived = x.Archived
};
return Ok(filtered);
}
其中pagesize和offset从网格传递过来。所以我可以得到一个特定的数据页面。以上是一个粗略的例子,但基本上这个想法是谓词是使用传递的参数建立的,返回过滤器是为了将从EF返回的字段减少到只需要的字段(并且还将字段设置为小写) 。
(然后有一个额外的“/ count”,它使用相同的参数减去pagsize和offset并返回原始查询中的行数,因此Grid知道返回的可能行数。这个示例方法是)
[Route("count")]
public IHttpActionResult GetUsersCount(
string username = null,
string surname = null,
string postcode = null,
bool includearchived = false,
int? pagesize = null,
int? pageoffset = null)
{
var predicate = PredicateBuilder.True<Users>();
if(username != null)
predicate = predicate.And(x => x.Username.Contains(username));
if(surname != null)
predicate = predicate.And(x => x.Surname.Contains(surname));
if(postcode != null)
predicate = predicate.And(x => x.Postcode.Contains(postcode));
if (!includearchived)
predicate = predicate.And(x => x.Archived == false);
var results = _Service.GetUsers(predicate, pageoffset, pagesize);
return Ok(results.Count);
}
我现在需要将列过滤器添加到网格中,我认为网格显示的列数多于终点上的过滤器。 (可以在上面的演示链接中看到可搜索的标题文本字段)。
我的问题是如何最好地处理evey可能列的这些过滤器。从WebApi返回的JSON示例可能(更多内容而非)将包含GET端点的过滤器参数中不存在的其他字段(因此在上面的示例中,它包含国家,邮政编码等字段)。
因此,当用户有效过滤使用列时,WebApi GET无法处理搜索参数并返回相应的返回值?
(因为这是一个由db驱动的通用解决方案,所以实际上api端点不能被编辑来处理所有返回的列过滤器,除非我们可以传递某种文本数组,它通常可以用于api端吗?)
有没有人对此可能的解决方案或解决方法有任何想法?我确信这可能是某人之前在某个时候看到过的。