Gridview插入删除与视图状态中的自定义对象
我想设计一个嵌套的gridview,通过在viewstate内动态定制业务对象插入,更新,删除功能。Gridview插入删除与视图状态中的自定义对象
(Master Gridview) EmployeeID EmployeeName
1 Ted
(Child Gridview)
ItemID ItemName
1 Keyboard
2 Mouse
2 John
(Child Gridview)
ItemID ItemName
1 PSU
2 GPU
3 Printer
我以前用datatable/dataviews做过这件事,但它们是真正的内存猪。
如何实现业务对象的主/从功能?
什么是主细节/业务对象中Dataview的替代方案。
我知道它的一个相当宽泛的问题,但它的价值在一定的问题的东西=)
回答:
老实说,GridViews不会为您提供与其他表相关的ASP.NET控件的巨大性能提升。如果你写一个分层对象如下:
public class Employee {
[Constructors go here]
public int EmployeeID { get; private set; }
public string EmployeeName { get; private set; }
public List<Child> Children { get; private set; } // Or Collection, Array, etc.
}
你还是得听的RowDataBound
事件,投你行的DataItem
你的子类,然后编程转让其属性的GridViewRow。
最重要的是,你必须创建在关闭当前<td>
和<tr>
标签(或<div>
或<span>
标签,如果你感觉稍微少自虐)一TemplateField
的乐趣,然后嵌入您的GridView
已经生成的表格中的另一个GridView。
请注意,我们尚未达到您插入,删除和更新的程度。老实说,如果你有时间,尝试使用AJAX(真正的东西,而不是AutoPostBack
垃圾)。 ASP.NET WebMethods可以通过调用.RenderControl()
来从ASP.NET控件返回HTML,除非您绝对需要一次性加载整个网格及其所有子节点,并将其全部显示给用户,否则它很可能会获得您可以缩短页面加载时间,并减少Web服务器的负载。
如果将这与jQuery结合使用,调用ASP.NET WebMethods很容易。作为这样做的人,我认为jQuery/AJAX方法实际上比编写一些基于声音的LINQ语句(或ADO.NET查询)更容易,构建一个巨大的业务对象,并试图将其全部管理在一个页面加载。另一方面,如果你决定使用ASP.NET来做这件事,我会高度建议你阅读有关RowEditing事件的MSDN文章。它详细介绍了正确设置和获取EditIndex的一些细节,并将其事件分解为小函数,这对于这样的事情是绝对必要的。除了您在那里看到的内容外,我建议您将业务对象集合存储在会话中,并在任何行编辑/创建/删除事件中修改它们,然后重新绑定GridView。
使用此方法,您的用户理想情况下必须单击提交按钮才能实际保存任何更改。这可以让你(和他们)在有人不小心删除一个项目或者用一个无效值更新它时避免很多心痛。
回答:
不是100%起步,但它看起来像你问的是如何定义的第一件事业务对象内的主/明细关系。然后,当它涉及到你只想绑定到你想要收集每个级别绑定到你的主网格视图
public class Employee {
public int EmployeeId {get;set;}
public string EmployeeName {get;set;}
public List<Child> Children {get;set;}
}
:在你和孩子有个员工例如,你可以有一个像对象。因此,1级将绑定到List<Employee>
,然后2级将绑定到Employee.Children,这将是List<Child>
。在主栅格视图的RowDataBound事件期间,您很可能想要绑定级别2
对于复杂对象(如业务对象),dataview的替代方法实际上就是您所做的任何事情。如果您只想在视图状态下管理插入,更新和删除操作,那么您也可能希望拥有自己的自定义方式,因为开箱即用的数据源可能无法按照您希望的方式工作。
以上是 Gridview插入删除与视图状态中的自定义对象 的全部内容, 来源链接: utcz.com/qa/258529.html