을 제외한 모든 열을 정렬 또는 검색 할 때 Null 참조 예외가 발생합니다. JQGrid에서 열을 정렬하고 검색하는 코드입니다. 그것은 첫 번째 열에 잘 작동하지만 정렬 또는 다른 열을 검색하는 널 참조 예외가 발생하고 나는 왜 이런 일을하는지 알아낼 것.아래의 사용자 이름
private PropmetEntities db = new PropmetEntities();
private DbSet<User> Table
{
get
{
return db.Users;
}
set
{
Table = db.Users;
}
}
[PrivilegeFilter(priv = Privileges.UserView)]
public ActionResult Grid(GridSettings set)
{
//var raw = db.Users.AsQueryable();
var vm = Table.Select(x => new UserGridModel()
//raw.OrderBy(x => x.Username).Select(x => new UserGridModel()
{
ID = x.ID,
Username = x.Username,
EMail = x.ContactInformation.EMail,
Surname = x.ContactInformation.Surname,
Role = x.Role1.Description
}).ToList().AsQueryable();
ApplyGridSummarySettingsToGrid(set, ref vm);
GridModel grid = new GridModel(set, vm.Count());
grid.rows = vm.Skip((set.PageIndex - 1) * set.PageSize).Take(set.PageSize).ToList();
return Json(grid, JsonRequestBehavior.AllowGet);
}
public void ApplyGridSummarySettingsToGrid(GridSettings set, ref IQueryable<UserGridModel> rows)
{
if (set.IsSearch)
{
rows = set.Where.rules.Aggregate(rows, FilterGridSummary);
}
rows = rows.OrderBy(x => x.Username);
SortGrid(set, ref rows);
}
public IQueryable<UserGridModel> FilterGridSummary(IQueryable<UserGridModel> rows, MvcJqGrid.Rule rule)
{
switch (rule.field)
{
case "Username": return rows.Where(x => x.Username.ToLower().Contains(rule.data.ToLower()));
case "EMail": return rows.Where(x => x.ContactInformation.EMail.ToLower().Contains(rule.data.ToLower()));
case "Surname": return rows.Where(x => x.ContactInformation.Surname.ToLower().Contains(rule.data.ToLower()));
case "Role": return rows.Where(x => x.Role1.Description.ToLower().Contains(rule.data.ToLower()));
default:
return rows;
}
}
private void SortGrid(GridSettings set, ref IQueryable<UserGridModel> rows)
{
if (set.SortOrder == "asc")
{
switch (set.SortColumn)
{
case "Username":
rows = rows.OrderBy(x => x.Username);
break;
case "EMail":
rows = rows.OrderBy(x => x.ContactInformation.EMail);
break;
case "Surname":
rows = rows.OrderBy(x => x.ContactInformation.Surname);
break;
case "Role":
rows = rows.OrderBy(x => x.Role1.Description);
break;
default:
rows = rows.OrderBy(x => x.Username).ThenBy(x => x.ID);
break;
}
}
else
{
switch (set.SortColumn)
{
case "Username":
rows = rows.OrderByDescending(x => x.Username);
break;
case "EMail":
rows = rows.OrderByDescending(x => x.ContactInformation.EMail);
break;
case "Surname":
rows = rows.OrderByDescending(x => x.ContactInformation.Surname);
break;
case "Role":
rows = rows.OrderByDescending(x => x.Role1.Description);
break;
default:
rows = rows.OrderByDescending(x => x.Username).ThenBy(x => x.ID);
break;
}
}
}
public class UserGridModel
{
public int ID { get; set; }
public string Username {get; set;}
public string EMail { get; set; }
public string Surname { get; set; }
public string Role { get; set; }
public ContactInformation ContactInformation { get; set; }
public Role Role1 { get; set; }
}
내가 정렬하거나 잘 작동 사용자 이름 열을 검색하려고하면 있지만 다른 컬럼에 내가 여기에 null 참조 예외를 얻을 :
당신이breakpoint
설정해야 할 일은
GridModel grid = new GridModel(set, vm.Count());
'Table' 속성의 세터는 무엇을 설명 할 수 있습니까? 'Table = db.Users; '현재 값을 동일한 속성에 다시 할당하기 때문에 StackOverflow 예외가 발생합니다. –
null을 반환하는 행은 무엇입니까? "set.Where.rules.Aggregate (rows, FilterGridSummary)" –
테이블 속성은 테이블 db.users의 내용으로 DataSet을 채 웁니다. 내가 얻는 유일한 null은 : GridModel grid = new GridModel (set, vm.Count()); ' – Hydro