2015-07-09 4 views
0

В настоящее время javascript должен получать данные, но теперь он отображается в сетке.Kendo сетка не покажет никаких данных

Вот код в моем * .cshtml файл, который должен показать результаты данного запроса:

     <div class="col-md-6 fill-height"> 
          <div class="row btn-row"> 
           <div class="sxs"> 
            <button id="run-test-rule-btn" title="Test Rule"> 
            </button> 
            <span class="button-caption">Test Rule</span> 
           </div> 
          </div> 
          <div class="row"> 
           <textarea id="rule-sql" name="Rule Sql" style=""></textarea> 
          </div> 
          <div class="row fill-height"> 
           <div id="query-results-grid"> 
           </div> 
          </div> 
         </div> 

Вот некоторые из кода в моей * .js файла:

var IDS = { 
    queryResultsGrid: "#query-results-grid", 
    ... 
    runTestRuleBtn: "#run-test-rule-btn", 
}; 
var Grids = { 
    TestRuleResultsGrid: null, 
    ... 
}; 

var PageState = { 
    ... 
    AddingRule: false, 
    TestRuleResult: null 
}; 

function initQueryResultsGrid() { 
    $(IDS.queryResultsGrid).kendoGrid({ 
     selectable: true, 
     scrolable: true, 
     sortable: false, 
     columns: [ 
      { field: "UWI", title: "UWI", width: "100%", attributes: { tabindex: "1" } } 
     ], 

     change: function() { 
      var selectedDataItem = this.dataItem(this.select()); 
      if (PageState.Selected.TestRuleResult !== selectedDataItem.TestRuleResult) { 
       PageState.Selected.TestRuleResult = selectedDataItem.TestRuleResult; 
       testRuleResultsSelectionChanged(); 
      } 
     }, 
     editable: false 
    }); 

    Grids.TestRuleResultsGrid = $(IDS.queryResultsGrid).data('kendoGrid'); 
} 

function execTestRule() { 
    $.ajax({ 
     type: 'POST', 
     url: "ExecuteTestRule", 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify({ 
      ruleSql : PageState.SqlEditor.RuleSql.getValue(), 
      parameters: PageState.RuleParameters 
     }), 
     success: function (matchedUwiList) { 
      PageState.TestRuleResult = matchedUwiList; 

      var dataSource = new kendo.data.DataSource({ 
       data: matchedUwiList 
      }); 
      Grids.TestRuleResultsGrid.setDataSource(dataSource); 
      PageState.Selected.ChildUwi = null; 
      updateButtonStates(); 
     } 
    }); 
} 

Вот код в мой контроллер:

public ActionResult ExecuteTestRule(string ruleSql, List<PdsMatchRuleParam> parameters = null) 
    { 
     return Json(new MatchDataSource().ExecuteTestRule(ruleSql, parameters), JsonRequestBehavior.AllowGet); 
    } 

Вот код в моей модели:

public List<string> ExecuteTestRule(string ruleRawSql, List<MatchRuleParam> parameters) 
    { 
     var da = new DataAccess(); 
     var ruleSql = ruleRawSql.Replace(@"{KEY}", "#*$pkey"); 
     var dbParameters = new List<DataAccess.DbParameter>(); 

     dbParameters.Add(new DataAccess.DbParameter("pkey", DbType.AnsiString, 4000, 
      parameters[4].DefaultValue)); 
     var dt = da.Select(ruleSql, dbParameters.ToArray()); 
     var uwis = (from DataRow r in dt.Rows 
      select r["UWI"].ToString()).ToList(); 

     return uwis; 
    } 

Вот данные, которые присутствуют в DataSource Grids.TestRuleResultsGrid.setDataSource(dataSource);, так что я знаю, что это получает соответствующие данные из базы данных:

matchedUwiList 
["10115348", "10115348-001", "10117434-000"] 

Что мне не хватает? ТИА.

ответ

1

это много для обработки, но мой первый инстинкт должен был бы изменить ExecuteTestRule возвращать результат JSON, который содержит как имя поля

public ActionResult ExecuteTestRule(string ruleSql, List<PdsMatchRuleParam> parameters = null) 
    { 
     return Json(new MatchDataSource().ExecuteTestRule(ruleSql, parameters) 
      .Select(a => new {UWI = a}), JsonRequestBehavior.AllowGet); 
    } 
+0

Спасибо, что исправили проблему! – Roger

0

@ JamieD77 имеет право идея - это то, что Я закончил делать - добавление анонимного типа, чтобы дать некоторую структуру объектам JSON, хотя ответ @ JamieD77 лучше, потому что он сохранил анонимный объект в контроллере, который, по моему мнению, является лучшим для него:

public object ExecuteTestRule(string ruleRawSql, List<PdsMatchRuleParam> parameters) 
    { 
     var da = new DataAccess(); 
     var ruleSql = ruleRawSql.Replace(@"{KEY}", "#*$pKey"); 
     var dbParameters = new List<DataAccess.DbParameter>(); 

     dbParameters.Add(new DataAccess.DbParameter("pKey", DbType.AnsiString, 4000, 
      parameters[4].DefaultValue)); 
     var dt = da.Select(ruleSql, dbParameters.ToArray()); 
     var uwis = (from r in dt.AsEnumerable() 
      select new 
      { 
       UWI = r.ToString() 
      }).ToList(); 

     return uwis; 
    } 
Смежные вопросы