想分别对父网格和子网格进行 CRUD 操作
Want to do crud operation separately ech for parent grid and child grid
$(function() {
$("#jqGrid").jqGrid({
url: "/Student/GetStudents",
datatype: 'json',
mtype: 'Get',
colNames: ['StudentId', 'FirstName', 'LastName', 'Gender', 'Class'],
colModel: [{
key: true,
hidden: true,
name: 'StudentId',
index: 'StudentId',
editable: true
},
{
key: false,
name: 'FirstName',
index: 'FirstName',
editable: true
},
{
key: false,
name: 'LastName',
index: 'LastName',
editable: true
},
{
key: false,
name: 'Gender',
index: 'Gender',
editable: true,
edittype: 'select',
editoptions: {
value: {
'M': 'Male',
'F': 'Female',
'N': 'None'
}
}
},
{
key: false,
name: 'Class',
index: 'Class',
editable: true,
edittype: 'select',
editoptions: {
value: {
'1': '1st Class',
'2': '2nd Class',
'3': '3rd Class',
'4': '4th Class',
'5': '5th Class'
}
}
}
],
pager: jQuery('#jqControls'),
rowNum: 10,
sortname: 'StudentId',
sortorder: 'asc',
rowList: [10, 20, 30, 40, 50],
height: '100%',
viewrecords: true,
subGrid: true,
iconSet: "fontAwesome",
multiSort: true,
sortable: true,
loadonce: true,
additionalProperties: ['Class', 'ClassLang'],
autoencode: true,
cmTemplate: {
autoResizable: true
},
autoresizeOnLoad: true,
autowidth: true,
autoResizing: {
//resetWidthOrg: true,
compact: true
},
caption: 'Students Records',
emptyrecords: 'No Students Records are Available to Display',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
},
multiselect: false,
subGridRowExpanded: function(subgrid_id, row_id) {
var subgrid_table_id;
subgrid_table_id = subgrid_id + "_t";
jQuery("#" + subgrid_id).html("<table id='" + subgrid_table_id + "' class='scroll'></table>");
jQuery("#" + subgrid_table_id).jqGrid({
//url: "/Student/GetStudentsMarks?RowId=" + row_id,
// data: { 'RowId': row_id },
datatype: function(pdata) {
getDataSubGrid(pdata, row_id);
},
mtype: 'Get',
colNames: ['Id', 'StudentId', 'SubjectId', 'Subject', 'Marks'],
colModel: [{
key: true,
hidden: true,
align: "right",
name: 'Id',
index: 'Id',
editable: true
},
{
key: true,
hidden: true,
align: "right",
name: 't.StudentsId.StudentId',
index: 't.StudentsId.StudentId',
editable: true
},
{
key: true,
hidden: true,
align: "right",
name: 'SubjectId',
index: 'SubjectId',
editable: true
},
{
key: false,
Name: 'Subject',
index: 'Subject',
editable: true,
edittype: 'select',
editoptions: {
value: {
'1': 'Maths',
'2': 'English',
'3': 'Physics'
}
}
},
{
key: false,
name: 'Marks',
align: "right",
index: 'Marks',
editable: true
}
],
pager: jQuery('#jqControlsSub'),
height: '100%',
rowNum: 20,
sortname: 'StudentId',
sortorder: 'asc',
rowList: [10, 20, 30, 40, 50],
viewrecords: true
}).navGrid('#jqControlsSub', {
edit: true,
add: true,
del: true,
search: true,
refresh: true
}, {
zIndex: 100,
url: '/Subjects/EditSub',
closeOnEscape: true,
closeAfterEdit: true,
recreateForm: true,
afterComplete: function(response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
}, {
zIndex: 100,
url: "/Subjects/CreateSub",
closeOnEscape: true,
closeAfterAdd: true,
afterComplete: function(response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
}, {
zIndex: 100,
url: "/Subjects/DeleteSub",
closeOnEscape: true,
closeAfterDelete: true,
recreateForm: true,
msg: "Are you sure you want to delete ... ? ",
afterComplete: function(response) {
if (response.responseText) {
alert(response.responseText);
}
}
});
}
})
function getDataSubGrid(pData, row_id) {
gridId = "table_t";
$.ajax({
type: 'GET',
url: "/Student/GetStudentsMarks?RowId=" + row_id,
dataType: "json",
success: function(data, textStatus) {
console.log(data);
ReceivedClientData(JSON.parse(getMain(data)).rows);
},
error: function(data, textStatus) {
alert('An error has occured retrieving data subgrid!');
}
});
}
function getMain(dObj) {
if (dObj.hasOwnProperty('d'))
return dObj.d;
else
return dObj;
}
});
[HttpPost]
public string CreateSub(Models.StudentSubjectInfo Model) {
DataContext.SchoolContext db = new DataContext.SchoolContext();
string msg;
try {
if (ModelState.IsValid) {
db.StudentSubjectInfos.Add(Model);
db.SaveChanges();
msg = "Saved Successfully";
} else {
msg = "Validation data not successfully";
}
} catch (Exception ex) {
msg = "Error occured:" + ex.Message;
}
return msg;
}
public string EditSub(Models.StudentSubjectInfo Model) {
DataContext.SchoolContext db = new DataContext.SchoolContext();
string msg;
try {
if (ModelState.IsValid) {
db.Entry(Model).State = EntityState.Modified;
db.SaveChanges();
msg = "Saved Successfully";
} else {
msg = "Validation data not successfully";
}
} catch (Exception ex) {
msg = "Error occured:" + ex.Message;
}
return msg;
}
[HttpPost]
public string DeleteSub(int id) {
try {
if (id != 0) {
using(DataContext.SchoolContext db = new DataContext.SchoolContext()) {
Models.StudentSubjectInfo studentCourseInfo = db.StudentSubjectInfos.Find(id);
db.StudentSubjectInfos.Remove(studentCourseInfo);
db.SaveChanges();
return "Deleted successfully";
}
} else {
return "Validation data not successfully";
}
} catch (Exception ex) {
return "Error occured:" + ex.Message;
}
}
public JsonResult GetStudentsMarks(string sidx, string sort, int page, int rows, int RowId) {
DataContext.SchoolContext db = new DataContext.SchoolContext();
sort = (sort == null) ? "" : sort;
int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
var StudentMarksList = db.StudentSubjectInfos.Where(x => x.StudentsId.StudentId == RowId).Select(
t => new {
Id = t.SubjectId,
t.StudentsId.StudentId,
SubjectId = t.Id,
Subject = t.SubjectId.Name,
t.Marks
});
int totalRecords = StudentMarksList.Count();
var totalPages = (int) Math.Ceiling((float) totalRecords / (float) rows);
if (sort.ToUpper() == "DESC") {
StudentMarksList = StudentMarksList.OrderByDescending(t => t.Marks);
StudentMarksList = StudentMarksList.Skip(pageIndex * pageSize).Take(pageSize);
} else {
//StudentMarksList = StudentMarksList.OrderBy(t => t.StudentId);
//StudentMarksList = StudentMarksList.Skip(pageIndex * pageSize).Take(pageSize);
}
var jsonData = new {
total = totalPages,
page,
records = totalRecords,
rows = StudentMarksList
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
想在 中执行 crud 这是 table / 网格我想在主网格中添加关于学生的信息并且也想在子网格中执行 crud
为了他们的成绩
如何使用 GetStudentsMarks
函数绑定子网格中的数据?
如何在 jquery 子网格中使用 ajax 调用并解析数据并将其绑定到子网格中
提前致谢
-- JS部分
$("#jqGrid").jqGrid({
url: "/Student/GetStudents",
datatype: 'json',
mtype: 'Get',
colNames: ['StudentId', 'FirstName', 'LastName', 'Gender', 'Class'],
colModel: [
{ key: true, hidden: true, name: 'StudentId', index: 'StudentId', editable: true },
{ key: false, name: 'FirstName', index: 'FirstName', editable: true },
{ key: false, name: 'LastName', index: 'LastName', editable: true },
{ key: false, name: 'Gender', index: 'Gender', editable: true, edittype: 'select', editoptions: { value: { 'M': 'Male', 'F': 'Female', 'N': 'None' } } },
{ key: false, name: 'Class', index: 'Class', editable: true, edittype: 'select', editoptions: { value: { '1': '1st Class', '2': '2nd Class', '3': '3rd Class', '4': '4th Class', '5': '5th Class' } } }
//{ key: false, hidden: true, name: 'Name', align: "right", index: 'Name', editable: true },
//{ key: false, hidden: true, name: 'Marks', align: "right", index: 'Marks', editable: true }
],
pager: jQuery('#jqControls'),
rowNum: 10,
sortname: 'StudentId',
sortorder: 'asc',
rowList: [10, 20, 30, 40, 50],
height: '100%',
viewrecords: true,
subGrid: true,
iconSet: "fontAwesome",
multiSort: true,
sortable: true,
loadonce: true,
additionalProperties: ['Class', 'ClassLang'],
autoencode: true,
cmTemplate: {
autoResizable: true
},
autoresizeOnLoad: true,
autowidth: true,
autoResizing: {
//resetWidthOrg: true,
compact: true
},
caption: 'Students Records',
emptyrecords: 'No Students Records are Available to Display',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
},
multiselect: false,
subGridRowExpanded: function (subgrid_id, row_id) {
// we pass two parameters
// subgrid_id is a id of the div tag created within a table
// the row_id is the id of the row
// If we want to pass additional parameters to the url we can use
// the method getRowData(row_id) - which returns associative array in type name-value
// here we can easy construct the following
var subgrid_table_id;
subgrid_table_id = subgrid_id + "_t";
jQuery("#" + subgrid_id).html("<table id='" + subgrid_table_id + "' class='scroll'></table>");
jQuery("#" + subgrid_table_id).jqGrid({
url: "/Student/GetStudentsMarks?row_id=" + row_id,
datatype: "json",
colNames: ['Id','name','SubjectId' ,'Subject', 'Marks'],
colModel: [
{ key: true, hidden: true, name: 'Id', index: 'Id', editable: false },
{ key: true, hidden: true, name: 'StudentsId', index: 'StudentsId', editable: false },
{ key: false, name: 'SubjectId', align: "center", index: 'SubjectId', editable: true, edittype: 'select', editoptions: { value: { 1: 'Maths', 2: 'English', 3: 'Physics' } } },
{ key: false, name: 'Name', align: "center", index: 'Name', editable: false },
{ key: false, name: 'Marks', align: "center", index: 'Marks', editable: true }
],
pager: jQuery('#jqControlsSub'),
height: '100%',
rowNum: 20,
sortname: 'StudentId',
sortorder: 'asc',
rowList: [10, 20, 30, 40, 50],
viewrecords: true,
subGrid: false,
iconSet: "fontAwesome",
multiSort: true,
sortable: true,
loadonce: true,
additionalProperties: ['Name', 'Name'],
autoencode: true,
cmTemplate: {
autoResizable: true
},
autoresizeOnLoad: true,
caption: 'Subject Records',
emptyrecords: 'No Subject Records are Available to Display',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
}
}).navGrid('#jqControlsSub', { edit: true, add: true, del: true, search: true, refresh: true },
{
zIndex: 100,
url: '/Subjects/EditSub?Student_Id=' + row_id + "",
closeOnEscape: true,
closeAfterEdit: true,
recreateForm: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
},
{
zIndex: 100,
url: "/Subjects/CreateSub?Student_Id=" + row_id + "",
closeOnEscape: true,
closeAfterAdd: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
},
{
zIndex: 100,
url: "/Subjects/DeleteSub",
closeOnEscape: true,
closeAfterDelete: true,
recreateForm: true,
msg: "Are you sure you want to delete ... ? ",
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
}
}
});
}
//subGridRowExpanded: function (subgridDivId, rowId) {
// var subgridTableId = subgridDivId + "_t";
// $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
// $("#" + subgridTableId).jqGrid({
// datatype: 'local',
// data: mySubgrids[rowId],
// colNames: ['Col 1', 'Col 2', 'Col 3'],
// colModel: [
// { name: 'c1', width: 100 },
// { name: 'c2', width: 100 },
// { name: 'c3', width: 100 }
// ]
//});
//}
}).navGrid('#jqControls', { edit: true, add: true, del: true, search: true, refresh: true },
{
zIndex: 100,
url: '/Student/Edit',
closeOnEscape: true,
closeAfterEdit: true,
recreateForm: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
},
{
zIndex: 100,
url: "/Student/Create",
closeOnEscape: true,
closeAfterAdd: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
},
{
zIndex: 100,
url: "/Student/Delete",
closeOnEscape: true,
closeAfterDelete: true,
recreateForm: true,
msg: "Are you sure you want to delete Student... ? ",
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
});
});
-- CS部分
public string CreateSub([Bind(Exclude = "Id")] Models.StudentSubjectInfo Model, int Student_Id)
{
DataContext.SchoolContext db = new DataContext.SchoolContext();
string msg;
Model.StudentsId = Student_Id;
var data = db.StudentSubjectInfos.Where(x => x.StudentsId == Model.StudentsId && x.SubjectId == Model.SubjectId).FirstOrDefault();
try
{
if (ModelState.IsValid)
{
if (data != null) {
msg = "This subject is already exist choose another";
}
else
{
db.StudentSubjectInfos.Add(Model);
db.SaveChanges();
msg = "Saved Successfully";
}
}
else
{
msg = "Validation data not successfully";
}
}
catch (Exception ex)
{
msg = "Error occured:" + ex.Message;
}
return msg;
}
public string EditSub(Models.StudentSubjectInfo Model,int Student_Id)
{
DataContext.SchoolContext db = new DataContext.SchoolContext();
string msg;
Model.StudentsId = Student_Id;
Model.Id = db.StudentSubjectInfos.SingleOrDefault(x => x.StudentsId == Model.StudentsId && x.SubjectId == Model.SubjectId).Id;
try
{
if (ModelState.IsValid)
{
var data = db.StudentSubjectInfos.Where(x => x.Id == Model.Id).FirstOrDefault();
data.Marks = Model.Marks;
data.SubjectId = Model.SubjectId;
db.SaveChanges();
msg = "Updated Successfully";
}
else
{
msg = "Validation data not successfully";
}
}
catch (Exception ex)
{
msg = "Error occured:" + ex.Message;
}
return msg;
}
[HttpPost]
public string DeleteSub(int Id)
{
try
{
if (Id != 0)
{
using (DataContext.SchoolContext db = new DataContext.SchoolContext())
{
Models.StudentSubjectInfo studentCourseInfo = db.StudentSubjectInfos.Find(Id);
db.StudentSubjectInfos.Remove(studentCourseInfo);
db.SaveChanges();
return "Deleted successfully";
}
}
else
{
return "Validation data not successfully";
}
}
catch (Exception ex)
{
return "Error occured:" + ex.Message;
}
}
$(function() {
$("#jqGrid").jqGrid({
url: "/Student/GetStudents",
datatype: 'json',
mtype: 'Get',
colNames: ['StudentId', 'FirstName', 'LastName', 'Gender', 'Class'],
colModel: [{
key: true,
hidden: true,
name: 'StudentId',
index: 'StudentId',
editable: true
},
{
key: false,
name: 'FirstName',
index: 'FirstName',
editable: true
},
{
key: false,
name: 'LastName',
index: 'LastName',
editable: true
},
{
key: false,
name: 'Gender',
index: 'Gender',
editable: true,
edittype: 'select',
editoptions: {
value: {
'M': 'Male',
'F': 'Female',
'N': 'None'
}
}
},
{
key: false,
name: 'Class',
index: 'Class',
editable: true,
edittype: 'select',
editoptions: {
value: {
'1': '1st Class',
'2': '2nd Class',
'3': '3rd Class',
'4': '4th Class',
'5': '5th Class'
}
}
}
],
pager: jQuery('#jqControls'),
rowNum: 10,
sortname: 'StudentId',
sortorder: 'asc',
rowList: [10, 20, 30, 40, 50],
height: '100%',
viewrecords: true,
subGrid: true,
iconSet: "fontAwesome",
multiSort: true,
sortable: true,
loadonce: true,
additionalProperties: ['Class', 'ClassLang'],
autoencode: true,
cmTemplate: {
autoResizable: true
},
autoresizeOnLoad: true,
autowidth: true,
autoResizing: {
//resetWidthOrg: true,
compact: true
},
caption: 'Students Records',
emptyrecords: 'No Students Records are Available to Display',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
},
multiselect: false,
subGridRowExpanded: function(subgrid_id, row_id) {
var subgrid_table_id;
subgrid_table_id = subgrid_id + "_t";
jQuery("#" + subgrid_id).html("<table id='" + subgrid_table_id + "' class='scroll'></table>");
jQuery("#" + subgrid_table_id).jqGrid({
//url: "/Student/GetStudentsMarks?RowId=" + row_id,
// data: { 'RowId': row_id },
datatype: function(pdata) {
getDataSubGrid(pdata, row_id);
},
mtype: 'Get',
colNames: ['Id', 'StudentId', 'SubjectId', 'Subject', 'Marks'],
colModel: [{
key: true,
hidden: true,
align: "right",
name: 'Id',
index: 'Id',
editable: true
},
{
key: true,
hidden: true,
align: "right",
name: 't.StudentsId.StudentId',
index: 't.StudentsId.StudentId',
editable: true
},
{
key: true,
hidden: true,
align: "right",
name: 'SubjectId',
index: 'SubjectId',
editable: true
},
{
key: false,
Name: 'Subject',
index: 'Subject',
editable: true,
edittype: 'select',
editoptions: {
value: {
'1': 'Maths',
'2': 'English',
'3': 'Physics'
}
}
},
{
key: false,
name: 'Marks',
align: "right",
index: 'Marks',
editable: true
}
],
pager: jQuery('#jqControlsSub'),
height: '100%',
rowNum: 20,
sortname: 'StudentId',
sortorder: 'asc',
rowList: [10, 20, 30, 40, 50],
viewrecords: true
}).navGrid('#jqControlsSub', {
edit: true,
add: true,
del: true,
search: true,
refresh: true
}, {
zIndex: 100,
url: '/Subjects/EditSub',
closeOnEscape: true,
closeAfterEdit: true,
recreateForm: true,
afterComplete: function(response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
}, {
zIndex: 100,
url: "/Subjects/CreateSub",
closeOnEscape: true,
closeAfterAdd: true,
afterComplete: function(response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
}, {
zIndex: 100,
url: "/Subjects/DeleteSub",
closeOnEscape: true,
closeAfterDelete: true,
recreateForm: true,
msg: "Are you sure you want to delete ... ? ",
afterComplete: function(response) {
if (response.responseText) {
alert(response.responseText);
}
}
});
}
})
function getDataSubGrid(pData, row_id) {
gridId = "table_t";
$.ajax({
type: 'GET',
url: "/Student/GetStudentsMarks?RowId=" + row_id,
dataType: "json",
success: function(data, textStatus) {
console.log(data);
ReceivedClientData(JSON.parse(getMain(data)).rows);
},
error: function(data, textStatus) {
alert('An error has occured retrieving data subgrid!');
}
});
}
function getMain(dObj) {
if (dObj.hasOwnProperty('d'))
return dObj.d;
else
return dObj;
}
});
[HttpPost]
public string CreateSub(Models.StudentSubjectInfo Model) {
DataContext.SchoolContext db = new DataContext.SchoolContext();
string msg;
try {
if (ModelState.IsValid) {
db.StudentSubjectInfos.Add(Model);
db.SaveChanges();
msg = "Saved Successfully";
} else {
msg = "Validation data not successfully";
}
} catch (Exception ex) {
msg = "Error occured:" + ex.Message;
}
return msg;
}
public string EditSub(Models.StudentSubjectInfo Model) {
DataContext.SchoolContext db = new DataContext.SchoolContext();
string msg;
try {
if (ModelState.IsValid) {
db.Entry(Model).State = EntityState.Modified;
db.SaveChanges();
msg = "Saved Successfully";
} else {
msg = "Validation data not successfully";
}
} catch (Exception ex) {
msg = "Error occured:" + ex.Message;
}
return msg;
}
[HttpPost]
public string DeleteSub(int id) {
try {
if (id != 0) {
using(DataContext.SchoolContext db = new DataContext.SchoolContext()) {
Models.StudentSubjectInfo studentCourseInfo = db.StudentSubjectInfos.Find(id);
db.StudentSubjectInfos.Remove(studentCourseInfo);
db.SaveChanges();
return "Deleted successfully";
}
} else {
return "Validation data not successfully";
}
} catch (Exception ex) {
return "Error occured:" + ex.Message;
}
}
public JsonResult GetStudentsMarks(string sidx, string sort, int page, int rows, int RowId) {
DataContext.SchoolContext db = new DataContext.SchoolContext();
sort = (sort == null) ? "" : sort;
int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
var StudentMarksList = db.StudentSubjectInfos.Where(x => x.StudentsId.StudentId == RowId).Select(
t => new {
Id = t.SubjectId,
t.StudentsId.StudentId,
SubjectId = t.Id,
Subject = t.SubjectId.Name,
t.Marks
});
int totalRecords = StudentMarksList.Count();
var totalPages = (int) Math.Ceiling((float) totalRecords / (float) rows);
if (sort.ToUpper() == "DESC") {
StudentMarksList = StudentMarksList.OrderByDescending(t => t.Marks);
StudentMarksList = StudentMarksList.Skip(pageIndex * pageSize).Take(pageSize);
} else {
//StudentMarksList = StudentMarksList.OrderBy(t => t.StudentId);
//StudentMarksList = StudentMarksList.Skip(pageIndex * pageSize).Take(pageSize);
}
var jsonData = new {
total = totalPages,
page,
records = totalRecords,
rows = StudentMarksList
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
想在 中执行 crud 这是 table / 网格我想在主网格中添加关于学生的信息并且也想在子网格中执行 crud 为了他们的成绩 如何使用 GetStudentsMarks 函数绑定子网格中的数据? 如何在 jquery 子网格中使用 ajax 调用并解析数据并将其绑定到子网格中 提前致谢
-- JS部分
$("#jqGrid").jqGrid({
url: "/Student/GetStudents",
datatype: 'json',
mtype: 'Get',
colNames: ['StudentId', 'FirstName', 'LastName', 'Gender', 'Class'],
colModel: [
{ key: true, hidden: true, name: 'StudentId', index: 'StudentId', editable: true },
{ key: false, name: 'FirstName', index: 'FirstName', editable: true },
{ key: false, name: 'LastName', index: 'LastName', editable: true },
{ key: false, name: 'Gender', index: 'Gender', editable: true, edittype: 'select', editoptions: { value: { 'M': 'Male', 'F': 'Female', 'N': 'None' } } },
{ key: false, name: 'Class', index: 'Class', editable: true, edittype: 'select', editoptions: { value: { '1': '1st Class', '2': '2nd Class', '3': '3rd Class', '4': '4th Class', '5': '5th Class' } } }
//{ key: false, hidden: true, name: 'Name', align: "right", index: 'Name', editable: true },
//{ key: false, hidden: true, name: 'Marks', align: "right", index: 'Marks', editable: true }
],
pager: jQuery('#jqControls'),
rowNum: 10,
sortname: 'StudentId',
sortorder: 'asc',
rowList: [10, 20, 30, 40, 50],
height: '100%',
viewrecords: true,
subGrid: true,
iconSet: "fontAwesome",
multiSort: true,
sortable: true,
loadonce: true,
additionalProperties: ['Class', 'ClassLang'],
autoencode: true,
cmTemplate: {
autoResizable: true
},
autoresizeOnLoad: true,
autowidth: true,
autoResizing: {
//resetWidthOrg: true,
compact: true
},
caption: 'Students Records',
emptyrecords: 'No Students Records are Available to Display',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
},
multiselect: false,
subGridRowExpanded: function (subgrid_id, row_id) {
// we pass two parameters
// subgrid_id is a id of the div tag created within a table
// the row_id is the id of the row
// If we want to pass additional parameters to the url we can use
// the method getRowData(row_id) - which returns associative array in type name-value
// here we can easy construct the following
var subgrid_table_id;
subgrid_table_id = subgrid_id + "_t";
jQuery("#" + subgrid_id).html("<table id='" + subgrid_table_id + "' class='scroll'></table>");
jQuery("#" + subgrid_table_id).jqGrid({
url: "/Student/GetStudentsMarks?row_id=" + row_id,
datatype: "json",
colNames: ['Id','name','SubjectId' ,'Subject', 'Marks'],
colModel: [
{ key: true, hidden: true, name: 'Id', index: 'Id', editable: false },
{ key: true, hidden: true, name: 'StudentsId', index: 'StudentsId', editable: false },
{ key: false, name: 'SubjectId', align: "center", index: 'SubjectId', editable: true, edittype: 'select', editoptions: { value: { 1: 'Maths', 2: 'English', 3: 'Physics' } } },
{ key: false, name: 'Name', align: "center", index: 'Name', editable: false },
{ key: false, name: 'Marks', align: "center", index: 'Marks', editable: true }
],
pager: jQuery('#jqControlsSub'),
height: '100%',
rowNum: 20,
sortname: 'StudentId',
sortorder: 'asc',
rowList: [10, 20, 30, 40, 50],
viewrecords: true,
subGrid: false,
iconSet: "fontAwesome",
multiSort: true,
sortable: true,
loadonce: true,
additionalProperties: ['Name', 'Name'],
autoencode: true,
cmTemplate: {
autoResizable: true
},
autoresizeOnLoad: true,
caption: 'Subject Records',
emptyrecords: 'No Subject Records are Available to Display',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: false,
Id: "0"
}
}).navGrid('#jqControlsSub', { edit: true, add: true, del: true, search: true, refresh: true },
{
zIndex: 100,
url: '/Subjects/EditSub?Student_Id=' + row_id + "",
closeOnEscape: true,
closeAfterEdit: true,
recreateForm: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
},
{
zIndex: 100,
url: "/Subjects/CreateSub?Student_Id=" + row_id + "",
closeOnEscape: true,
closeAfterAdd: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
},
{
zIndex: 100,
url: "/Subjects/DeleteSub",
closeOnEscape: true,
closeAfterDelete: true,
recreateForm: true,
msg: "Are you sure you want to delete ... ? ",
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
}
}
});
}
//subGridRowExpanded: function (subgridDivId, rowId) {
// var subgridTableId = subgridDivId + "_t";
// $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
// $("#" + subgridTableId).jqGrid({
// datatype: 'local',
// data: mySubgrids[rowId],
// colNames: ['Col 1', 'Col 2', 'Col 3'],
// colModel: [
// { name: 'c1', width: 100 },
// { name: 'c2', width: 100 },
// { name: 'c3', width: 100 }
// ]
//});
//}
}).navGrid('#jqControls', { edit: true, add: true, del: true, search: true, refresh: true },
{
zIndex: 100,
url: '/Student/Edit',
closeOnEscape: true,
closeAfterEdit: true,
recreateForm: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
},
{
zIndex: 100,
url: "/Student/Create",
closeOnEscape: true,
closeAfterAdd: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
},
{
zIndex: 100,
url: "/Student/Delete",
closeOnEscape: true,
closeAfterDelete: true,
recreateForm: true,
msg: "Are you sure you want to delete Student... ? ",
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
location.reload(true);
}
}
});
});
-- CS部分
public string CreateSub([Bind(Exclude = "Id")] Models.StudentSubjectInfo Model, int Student_Id)
{
DataContext.SchoolContext db = new DataContext.SchoolContext();
string msg;
Model.StudentsId = Student_Id;
var data = db.StudentSubjectInfos.Where(x => x.StudentsId == Model.StudentsId && x.SubjectId == Model.SubjectId).FirstOrDefault();
try
{
if (ModelState.IsValid)
{
if (data != null) {
msg = "This subject is already exist choose another";
}
else
{
db.StudentSubjectInfos.Add(Model);
db.SaveChanges();
msg = "Saved Successfully";
}
}
else
{
msg = "Validation data not successfully";
}
}
catch (Exception ex)
{
msg = "Error occured:" + ex.Message;
}
return msg;
}
public string EditSub(Models.StudentSubjectInfo Model,int Student_Id)
{
DataContext.SchoolContext db = new DataContext.SchoolContext();
string msg;
Model.StudentsId = Student_Id;
Model.Id = db.StudentSubjectInfos.SingleOrDefault(x => x.StudentsId == Model.StudentsId && x.SubjectId == Model.SubjectId).Id;
try
{
if (ModelState.IsValid)
{
var data = db.StudentSubjectInfos.Where(x => x.Id == Model.Id).FirstOrDefault();
data.Marks = Model.Marks;
data.SubjectId = Model.SubjectId;
db.SaveChanges();
msg = "Updated Successfully";
}
else
{
msg = "Validation data not successfully";
}
}
catch (Exception ex)
{
msg = "Error occured:" + ex.Message;
}
return msg;
}
[HttpPost]
public string DeleteSub(int Id)
{
try
{
if (Id != 0)
{
using (DataContext.SchoolContext db = new DataContext.SchoolContext())
{
Models.StudentSubjectInfo studentCourseInfo = db.StudentSubjectInfos.Find(Id);
db.StudentSubjectInfos.Remove(studentCourseInfo);
db.SaveChanges();
return "Deleted successfully";
}
}
else
{
return "Validation data not successfully";
}
}
catch (Exception ex)
{
return "Error occured:" + ex.Message;
}
}