ASP.NET 2.0用于添加到数据库的正确控件

ASP.NET 2.0用于添加到数据库的正确控件,asp.net,ado.net,c#-2.0,Asp.net,Ado.net,C# 2.0,我在寻求一些建议。我已经在Oracle EnterpriseOne平台上开发了大约11年,现在正在向c。因此,我对编程并不陌生,但在创建c ASP.NET网页时,有几个概念我一直在绞尽脑汁 我有以下情况: 所以我有一个订单头+订单明细表,我想创建一个新订单,每个订单头可能有多个订单行 在EnterpriseOne中,我会有一个登录屏幕,在那里可以搜索、选择和添加新订单。当您单击添加按钮时,我将加载一个标题屏幕,其中没有网格,您将输入所有订单标题信息,所有订单详细信息记录共用。单击标题屏幕的OK(

我在寻求一些建议。我已经在Oracle EnterpriseOne平台上开发了大约11年,现在正在向c。因此,我对编程并不陌生,但在创建c ASP.NET网页时,有几个概念我一直在绞尽脑汁

我有以下情况:

所以我有一个订单头+订单明细表,我想创建一个新订单,每个订单头可能有多个订单行

在EnterpriseOne中,我会有一个登录屏幕,在那里可以搜索、选择和添加新订单。当您单击添加按钮时,我将加载一个标题屏幕,其中没有网格,您将输入所有订单标题信息,所有订单详细信息记录共用。单击标题屏幕的OK(确定)时,我将显示一个详细屏幕网格,您可以在其中添加多个订单详细记录

那么如何在c ASP.NET 2.0中实现这一点呢?我想创建一个N层应用程序

我已经创建了新的类OrdersHeader+Order Detail,它们与我的订单标题和订单明细表相匹配。 我创建了一个新的类OrdersDB,它使用ADO.NET和存储过程与订单头/细节类和数据库交互。 在登录屏幕上,我创建了一个ObjectDataSource,指向OrdersDB和SelectMethod。。。因此,这将返回OrderDetails的集合,并允许用户搜索和选择现有的OrderDetails。 当他们单击add时,我创建了一个标题屏幕,其中将包含一个文本框+标签的列表。单击OK时,我将根据屏幕上的值创建一个新OrderHeader类的实例,并传递给OrdersDB的insert方法。这是正确的吗? 在详细信息屏幕上,我应该使用哪个控件让用户添加订单详细信息?我假设我可以使用GridView,它被设置为允许插入,但当查询空数据库时,这会返回一个空白网格,现在允许我添加新行。
我希望这足够清楚。我确信我需要做的是显而易见的,但我认为在另一个平台上工作多年对我来说已经把这个问题弄糊涂了。

这真的取决于你所适应的用户界面

如果您想要一个屏幕,基本上可以直接编辑数据库中的行编辑值、删除记录、添加记录,您可能正在寻找

这还取决于您对ASP.NET Web表单的舒适度/体验。Web表单在拖放意义上是伟大的,这也是它的失败。这意味着您可以在页面上扔掉一个控件,然后准备开始

但有时这太过分了。我更喜欢只在绝对必要时才使用web控件

我将使用一个简单的表单、基本表单字段,然后在服务器上构建实体,并将其传递到业务层进行验证和持久化。完全控制整个过程


顺便说一下,在你的问题中,我看不出你的任何解决方案到目前为止都是N层的?如果您想要N-Tier,您应该通过某种web服务(例如WCF)与您的数据层(位于单独的计算机上)进行通信,而不是直接调用OrdersDB,我认为您的想法是正确的。问题是如何使用网格视图进行插入,不幸的是,它没有插入项模板。最简单的方法是将插入控件放在面板中,并在单击“添加项”按钮时显示控件

通过向页脚项目模板添加插入控件,可以使用网格视图进行插入,但必须自己处理页脚行的隐藏和显示。此外,如果绑定到空数据集,则不会显示页脚行,因此您必须使用虚拟记录或其他内容填充gridview,以便在没有项目时显示页脚,因此需要跳转一些环,但如果使用谷歌搜索,您应该会找到一些示例。下面是一个看起来有效的例子:

还有其他一些控件可以使用,比如detailsview和formview,但老实说,我从来没有使用过它们,因为当你增加事务和自定义验证等复杂性时,这可能是一件痛苦的事情,我认为手动处理编辑和插入的所有代码会更容易,除非情况非常简单。它们能够从数据库模式自动生成字段和标签,因此非常有用

所以,至少对我来说,我使用grid view进行查看,有时进行编辑,但很少用于插入,而且我很少使用内置更新和双向数据绑定。通常,如果我在网格视图中进行编辑,我将只使用edit按钮捕获编辑项索引,并用命令参数或griddatakeys抓取键,然后自己处理更新代码。并不是说这是最好的方式,而是我最常做的方式