剑道网格没有显示任何数据
Posted
技术标签:
【中文标题】剑道网格没有显示任何数据【英文标题】:Kendo grid not showing any data 【发布时间】:2015-09-28 09:32:05 【问题描述】:目前,javascript 应该正在接收数据,但它现在显示在网格中。
这是我的 *.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"]
我错过了什么? TIA。
【问题讨论】:
【参考方案1】:这需要处理很多,但我的第一反应是更改您的 ExecuteTestRule
以返回包含 UWI
作为字段名称的 json 结果
public ActionResult ExecuteTestRule(string ruleSql, List<PdsMatchRuleParam> parameters = null)
return Json(new MatchDataSource().ExecuteTestRule(ruleSql, parameters)
.Select(a => new UWI = a), JsonRequestBehavior.AllowGet);
【讨论】:
谢谢你,解决了问题!【参考方案2】:@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;
【讨论】:
以上是关于剑道网格没有显示任何数据的主要内容,如果未能解决你的问题,请参考以下文章