C# Webforms网格不显示其数据绑定数据
我正在使用Syncfusions网格控件用于我基于的WebformsSee。我有一个非常简单的UserControl,上面有以下内容:C# Webforms网格不显示其数据绑定数据,c#,asp.net,.net,syncfusion,C#,Asp.net,.net,Syncfusion,我正在使用Syncfusions网格控件用于我基于的WebformsSee。我有一个非常简单的UserControl,上面有以下内容: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="NAVPrices.ascx.cs" Inherits="Q5.NAVPrices" %> <ej:Grid ID="PriceListGrid" runat="server" ClientIDMode="Static" A
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="NAVPrices.ascx.cs" Inherits="Q5.NAVPrices" %>
<ej:Grid ID="PriceListGrid" runat="server" ClientIDMode="Static" AllowSelection="True">
<Columns>
<ej:Column Field="ID" HeaderText="ID" IsPrimaryKey="True" TextAlign="Right" Width="125"></ej:Column>
<ej:Column Field="Description" HeaderText="Description" Width="100" />
<ej:Column Field="CustomerNo" HeaderText="Customer Number" Width="100" />
<ej:Column Field="CustomerName" HeaderText="Customer" Width="150" />
<ej:Column Field="Status" HeaderText="Status" Width="100" />
<ej:Column Field="CreatedBy" HeaderText="Created" Width="100" />
<ej:Column Field="ApprovedBy" HeaderText="Approved" Width="100" />
</Columns>
</ej:Grid>
Details Grid
<ej:Grid ID="PriceLineGrid" runat="server" ClientIDMode="Static">
<Columns>
<ej:Column Field="ID" HeaderText="ID" IsPrimaryKey="true" TextAlign="Right" Width="75" />
<ej:Column Field="PriceListId" HeaderText="PriceList ID" Width="80" />
<ej:Column Field="Description" HeaderText="Description" Width="75" />
<ej:Column Field="LastCost" HeaderText="Last Cost" TextAlign="Right" Width="75" Format="{0:C}" />
<ej:Column Field="SubGroup" HeaderText="Sub Group" Width="80" />
<ej:Column Field="MfgName" HeaderText="Mfg Name" Width="110" />
<ej:Column Field="Comment" HeaderText="Comment" Width="110" />
</Columns>
</ej:Grid>
<script type="text/javascript">
$(function () {
$("#PriceListGrid").ejGrid({
selectedRowIndex: 0,
rowSelected: function (args) {
var priceListId = args.data.ID;
var detaildata = window.ej.DataManager(window.gridData).executeLocal(window.ej.Query().where("PriceListId", window.ej.FilterOperators.equal, priceListId, false).take(10));
var gridObj = $("#PriceLineGrid").ejGrid("instance");
gridObj.dataSource(window.ej.DataManager(detaildata.slice(0, 5)));
}
});
});
</script>
我已经完成了代码的编写,我的IList按照我的预期由数据层中的对象填充,并且格式正确,我可以看到
这是两个对象的外观:
[Serializable]
public class PriceList
{
public string ID { get; set; }
public string Description { get; set; }
public string CustomerNo { get; set; }
public string CustomerName { get; set; }
public string Status { get; set; }
public string CreatedBy { get; set; }
public string ApprovedBy { get; set; }
}
[Serializable]
public class PriceLineItems
{
public string ID { get; set; }
public string PriceListId { get; set; }
public string Description { get; set; }
public string LastCost { get; set; }
public string SubGroup { get; set; }
public string MfgName { get; set; }
public string Comment { get; set; }
}
编辑
作为参考,这是可以工作的JavaScript:
$(function() {
var $data = $("#PriceLineGrid").ejGrid("instance")._dataSource();
$("#PriceListGrid").ejGrid({
selectedRowIndex: 0,
rowSelected: function(args) {
var priceListId = args.data.ID;
var detaildata = ej.DataManager($data).executeLocal(ej.Query().where("PriceListId", ej.FilterOperators.equal, priceListId, false).take(10));
var gridObj = $("#PriceLineGrid").ejGrid("instance");
gridObj.dataSource(ej.DataManager(detaildata.slice(0, 5)));
}
});
});
我现在的问题是,我并没有在PageLoad上用所有行填充Grid2,因为行太多了。因此,我需要更改此项以调用代码隐藏中的方法…我将为此打开一个新线程。将IList变量强制转换为列表:
在您的情况下,如果两个网格都没有填充网格,则以下是原因
关于初始渲染
Syncfusion网格与IEnumerable配合良好,正如Chris Schiffhauer所建议的,将priceLists和priceLineItems更改为List
在选定的主行上
在PriceListGrid的rowSelected事件中,您使用window.gridData作为数据源来过滤详细的gridPriceLineGrid数据。但是window.gridData将不包含PriceListId字段,因此在select行上也不会填充任何数据
var detaildata = window.ej.DataManager(window.gridData).executeLocal(window.ej.Query().where("PriceListId", window.ej.FilterOperators.equal, priceListId, false).take(10));
从jsondata.min.js引用的window.gridData将包含Syncfusion示例网格使用的JSON数组
因此,要根据主网格的选定行值过滤详细网格数据源,请使用以下代码
$("#PriceListGrid").ejGrid({
selectedRowIndex: 0,
rowSelected: function (args) {
var priceListId = args.data.ID;
var gridObj = $("#PriceLineGrid").ejGrid("instance");
var detaildata = window.ej.DataManager(gridObj.model.dataSource).executeLocal(window.ej.Query().where("PriceListId", window.ej.FilterOperators.equal, priceListId, false).take(10));
gridObj.dataSource(window.ej.DataManager(detaildata.slice(0, 5)));
}
});
在上面的示例中,将ej.DataManagerwindow.gridData更改为ej.DataManagergridObj.model.dataSource。在GetPriceLineItems中,将数据源设置为PriceLineItems,其声明不显示。你把这和priceLineItems混淆了吗?哎呀,你只是在我的问题中发现了我的一个输入错误。修复了getter方法返回列表、IEnumerable或IQueryable?如果不是列表,则它可能没有尝试从您的数据库中枚举,并且失败,因为在网格尝试加载连接时,连接已关闭。所以试试BusinessLayer.Company.getpricelistthis.CustomerNo.ToList;为什么“GetPriceLists”是公共的而“GetPriceLineItems”是私有的?他们从哪里打来的?两个网格都不能显示它们的数据吗?@chrisschifffhauer谢谢,这只是我多次尝试解决问题的结果。他们俩都是私密的,我的建议太好了,我的疏忽太愚蠢了!但是,它仍然没有显示我的数据……谢谢,你的回答非常接近我在这一步中所需要的。我将工作javaScript作为编辑添加到我的问题中。我现在的问题似乎是,我并没有像示例假设的那样用所有行填充第二个网格。我要做的事情太多了,需要等待Grid1中的一行被调用,这样Grid2就可以开始过滤了。我实际上会接受你的答案,因为这是我解决第一个问题的原因,然后我会为我的新问题开始一个新的线程。看起来是应该做的事。
priceLineItems.ToList();
and
priceLists.ToList();
var detaildata = window.ej.DataManager(window.gridData).executeLocal(window.ej.Query().where("PriceListId", window.ej.FilterOperators.equal, priceListId, false).take(10));
$("#PriceListGrid").ejGrid({
selectedRowIndex: 0,
rowSelected: function (args) {
var priceListId = args.data.ID;
var gridObj = $("#PriceLineGrid").ejGrid("instance");
var detaildata = window.ej.DataManager(gridObj.model.dataSource).executeLocal(window.ej.Query().where("PriceListId", window.ej.FilterOperators.equal, priceListId, false).take(10));
gridObj.dataSource(window.ej.DataManager(detaildata.slice(0, 5)));
}
});