C# 使用DevExpress GridView自定义绑定的建议
我正在使用DevExpress MVCxGridView实现自定义分页和绑定 这里有演示的链接 现在,数据本身来自api,因此,例如,数据的GET端点可以是C# 使用DevExpress GridView自定义绑定的建议,c#,asp.net,gridview,devexpress,C#,Asp.net,Gridview,Devexpress,我正在使用DevExpress MVCxGridView实现自定义分页和绑定 这里有演示的链接 现在,数据本身来自api,因此,例如,数据的GET端点可以是 public IHttpActionResult GetUsers( string username = null, string surname = null, string postcode = null, bool includearchived = false
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);
}
public IHttpActionResult GetUsers(
字符串username=null,
字符串姓氏=null,
字符串postcode=null,
bool includeChived=false,
int?pagesize=null,
int?pageoffset=null)
{
var predicate=PredicateBuilder.True();
如果(用户名!=null)
谓词=谓词。和(x=>x.Username.Contains(Username));
if(姓氏!=null)
谓词=谓词和(x=>x.姓氏包含(姓氏));
如果(邮政编码!=null)
谓词=谓词和(x=>x.Postcode.Contains(Postcode));
如果(!includeChived)
谓词=谓词和(x=>x.Archived==false);
var results=_Service.GetUsers(谓词、pageoffset、pagesize);
//过滤掉不需要的列
var筛选=结果中的x
选择新的
{
userid=x.ID,
日期=x.日期,
username=x.username
firstname=x.firstname,
姓氏=x.姓氏,
邮政编码=x。邮政编码,
typeid=x.Type.ID,
usertype=x.Type.ID==0?“Demo1”:“Demo2”,
已存档=x.已存档
};
返回Ok(已过滤);
}
其中pagesize和offset从网格中传递。所以我可以得到一页特定的数据。上面是一个粗略的示例,但基本上是使用传递的参数构建谓词,执行返回过滤器以将从EF返回的字段缩减为只需要的字段(还将字段设置为小写)
(然后还有一个“/count”,它接受相同的参数减去pagsize和offset,并返回原始查询中的行数,因此网格知道可能返回的行数。这方面的一个示例方法是)
[路由(“计数”)]
公共IHttpActionResult GetUsersCount(
字符串username=null,
字符串姓氏=null,
字符串postcode=null,
bool includeChived=false,
int?pagesize=null,
int?pageoffset=null)
{
var predicate=PredicateBuilder.True();
如果(用户名!=null)
谓词=谓词。和(x=>x.Username.Contains(Username));
if(姓氏!=null)
谓词=谓词和(x=>x.姓氏包含(姓氏));
如果(邮政编码!=null)
谓词=谓词和(x=>x.Postcode.Contains(Postcode));
如果(!includeChived)
谓词=谓词和(x=>x.Archived==false);
var results=_Service.GetUsers(谓词、pageoffset、pagesize);
返回Ok(results.Count);
}
我现在需要在网格中添加列过滤器,我提出了网格显示的列比端点上的过滤器多的问题。(可以在上面的演示链接中通过可搜索的标题文本字段查看)
我的问题是如何为每一个可能的列最好地处理这些过滤器。示例中从WebApi返回的JSON可能(通常情况下)包含GET端点的筛选器参数中不存在的其他字段(因此在上面的示例中,它包含国家、邮政编码等字段)
那么,当用户使用WebApi获取的列进行有效筛选时,是否无法处理搜索参数并相应返回
(因为这是一个由db驱动的通用解决方案,所以实际上不能编辑api端点来处理所有返回的列过滤器,除非我们可以传递某种文本数组,它可以通用地传递api端?)
有没有人对可能的解决方案或解决办法有什么想法?我相信这可能是以前有人看到过的
[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);
}