2013-06-17 4 views
0

있는 jqGrid 편집 기능은 내 그리드에서 잘 작동하지만, 항상 0삭제 ID는 항상 0있는 jqGrid에

@model Shop.Models.ShopModels.lstMainCategory 
<table id="list" class="scroll" cellpadding="0" cellspacing="0"></table> 
    <div id="pager" class="scroll" style="text-align:center;"></div>                

    <script type="text/javascript"> 

     var myGrid = $('#list'); 
     $(document).ready(function() { 

      $.jgrid.nav.addtext = "Add"; 
      $.jgrid.nav.edittext = "Edit"; 
      $.jgrid.nav.deltext = "Delete"; 
      $.jgrid.edit.addCaption = "Add Main Category"; 
      $.jgrid.edit.closeAfterAdd = true; 
      $.jgrid.edit.closeAfterEdit = true; 
      $.jgrid.edit.editCaption = "Edit Main Category"; 
      $.jgrid.del.caption = "Delete Main Category"; 
      $.jgrid.del.msg = "Delete selected Main Category?"; 

      $.extend($.jgrid.edit, { 
       beforeSubmit: function() { 
        $(this).jqGrid("setGridParam", { datatype: "json" }); 
        return [true, "", ""]; 
       } 
      }); 

      $("#list").jqGrid({ 
       url: '/MainCategory/DynamicGridData/', 
       datatype: 'json', 
       mtype: 'GET', 

       colNames: ['Edit', 'Main Category'], 
       colModel: [ 
     { name: 'MaincategoryID', index: 'MaincategoryID', width: 40, align: 'left', /* key: true,*/editable: true, editrules: { edithidden: false }, hidedlg: true, hidden: true }, 
     { name: 'MainCategoryName', index: 'MainCategoryName', search: true, width: 700, align: 'left', editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} }], 
       pager: jQuery('#pager'), 
       editurl: '@Url.Action("Update", "MainCategory")', 
       rowNum: 10, 
       width: '100%', 
       height: '100%', 
       rowList: [5, 10, 20, 50], 
       viewrecords: true, 
       loadonce: true, 
       ignoreCase: true, 
       caption: 'Main Categories' 

      }).navGrid('#pager', { edit: true, add: true, del: true, search: true, searchtext: "Search" }); 

      $("#list").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: false, defaultSearch: 'cn' }); 

      $("#list").setGridParam({ data: results.rows, localReader: reader }).trigger('reloadGrid'); 


    </script> 

컨트롤러로 기록 ID를 전달 기능을 삭제한다 :

public ActionResult Update(lstMainCategory viewModel, FormCollection formCollection) 
     { 
      var operation = formCollection["oper"]; 
      lstMainCategory mcat = new lstMainCategory(); 
      rep = new MaincategoryRepository(); 
      if (operation.Equals("add")) 
      {    

       mcat.MainCategoryName = viewModel.MainCategoryName; 
       rep.Create(mcat); 
       rep.Save(); 
      } 
      else if (operation.Equals("edit")) 
      { 
       mcat.MaincategoryID = viewModel.MaincategoryID; 
       mcat.MainCategoryName = viewModel.MainCategoryName; 
       rep.Edit(mcat); 
       rep.Save(); 
      } 
      else if (operation.Equals("del")) 
      { 

       rep.Delete(viewModel.MaincategoryID);//here MaincategoryID is always 0 so it's not working 
       rep.Save(); 
      } 

      return Content("true"); 
     } 

편집

MainCategoryID MainCategory 
16   aaa 
17   bbb 

enter image description here

저장소 : 모든

public object DynamicGridData(string sidx, string sord, int page, int rows, bool _search, string searchField, string searchOper, string searchString) 
     { 

      dc = new ShopDataContext(DBConnection.Connection); 

      int pageIndex = Convert.ToInt32(page) - 1; 
      int pageSize = rows; 
      int totalRecords = dc.tblMainCategories.Count(); 
      int totalPages = (int)Math.Ceiling((float)totalRecords/(float)pageSize); 

      List<MainCategory> lst = (from tbm in dc.tblMainCategories 
           select new MainCategory 
           { 
            MaincategoryID=tbm.MainCategoryID, 
            MainCategoryName=tbm.MainCategory, 
            DeleteID=tbm.MainCategoryID 
           }).ToList<MainCategory>().OrderBy(x=>x.MainCategoryName).ToList(); 

      List<MainCategory> Flst; 



      if (_search && searchField == "MainCategory") 
      { 
       Flst = lst.Where(r => r.MainCategoryName.Contains(searchString)).OrderBy(x => x.MainCategoryName).ToList().ToList(); 
      } 
      else 
       Flst = lst; 


      var GridData = new 
      { 
       total = totalPages, 
       page = page, 
       records = totalRecords, 
       rows = (
        from mcat in Flst 
        select new 
        { 
         i = mcat.MaincategoryID, 
         cell = new string[] { mcat.MaincategoryID.ToString(), mcat.MainCategoryName.ToString(),mcat.DeleteID.ToString() } 
        }).ToArray() 
      }; 

      return GridData; 
     } 
+0

그리드를 채우기 위해 사용하는 데이터는 무엇입니까? 2 행의 데이터를 게시 할 수 있습니까?사용자에게'MaincategoryID'를 포함하고 싶습니까? 그리드에 대해 'id'값을 갖는 값은 무엇입니까? – Oleg

+0

이 중요한 것은 ** '/ MainCategory/DynamicGridData /' '에서 반환 된 ** 정확한 JSON 응답 **입니다. 더미 값이있는 테이블은 추가 정보를 제공하지 않습니다. 'id' (rowid)로 무엇을 사용합니까? – Oleg

+0

@Oleg MaincategoryID는 컨트롤러에서 삭제 액션에서 전달하려는 ID이며 사용자에게 표시하고 싶지 않습니다. 두 행의 데이터를 추가했습니다 – chamara

답변

2

먼저 당신은 당신이 사용하는 서버 응답의 형식을 수정해야합니다. 이 아니고 i 속성이지만 대신 id 속성이 있습니다. 라인

i = mcat.MaincategoryID, 

당신은 어떤 동일한 정보의 중복이없는 것으로

rows = (
    from mcat in Flst 
    select new[] { 
     mcat.MaincategoryID.ToString(), 
     mcat.MainCategoryName, 
     mcat.DeleteID.ToString() 
    }).ToArray() 

에 코드

rows = (
    from mcat in Flst 
    select new 
    { 
     i = mcat.MaincategoryID, 
     cell = new string[] { mcat.MaincategoryID.ToString(), mcat.MainCategoryName.ToString(),mcat.DeleteID.ToString() } 
    }).ToArray() 

을 대체 할 수

id = mcat.MaincategoryID, 

에 고정되는 한 (발신 mcat.MaincategoryID 두 번) 보내시는 모든 항목에서 "id:""cell:" 문자열을 제거하십시오. 클라이언트 쪽에서 더 컴팩트 한 데이터를 읽으려면 jsonReader: { cell: "" } 옵션을 jqGrid에 추가해야합니다. 마지막 버전의 jqGrid를 사용하는 경우이 옵션은 선택 사항입니다.

MaincategoryID 열이 포함되도록하려면 열 (the answer 참조)의 editrules: { edithidden: true } 옵션을 사용해야합니다. 또는 prmNames: {id: "MaincategoryID"}을 추가 할 수 있습니다. 이 경우 jqGrid는 기본값이 "id" 대신 "MaincategoryID"로 rowid를 전송합니다.

MaincategoryID 열을 표시 할 필요가없는 경우 colModel에서 제거 할 수 있습니다. 경우에 당신은이

colNames: ['Edit', 'Main Category'], 
colModel: [ 
    { name: 'MainCategoryName', width: 700, editable: true, 
     editrules: { required: true }, formoptions: { elmsuffix: ' *'} } 
], 
pager: "#pager", 
gridview: true, 
jsonReader: {cell: "", id: 1}, 
prmNames: {id: "MaincategoryID"} 

있는 jqGrid 모든 행 (모든 <tr>)에 id 속성을 할당 될 것입니다있는 jqGrid 변경

rows = (
    from mcat in Flst 
    select new[] { 
     mcat.MainCategoryName, 
     mcat.MaincategoryID.ToString(), 
     mcat.DeleteID.ToString() 
    }).ToArray() 

에 서버에서 반환 된 데이터의 순서를 변경할 수 있습니다. sonReader: {id: 1}을 사용하면 jqGrid에 행 데이터의 두 번째 항목 (mcat.MaincategoryID.ToString())에서 ROWID를 알립니다. 다른 변경 사항 pager: "#pager"gridview: true은 내가 전에 the answer에 쓴 것과 같습니다. <table id="list" ...<div id="paber" ...에서 추가로 쓰레기를 제거해야합니다 (이전 답변 참조)