在ASP.NET中自定义编辑记录的最佳方法?
我来自Rails背景,并且在ASP.NET项目(不是ASP MVC)上做一些工作。新手问题:为记录表创建自定义编辑器的最简单方法是什么?
例如:我有一堆数据行,并且想要更改每个数据行上的"类别"字段-可能是一个下拉列表,一个链接,或者是用户键入了它。
在Rails中,我将遍历行以构建表,并且每行都有一个表单。该表单将具有一个输入框或者下拉列表,并将数据提交到控制器,例如" / item / edit / 15?category = foo",其中15是itemID,新类别是" foo"。
我是ASP.NET模型的新手,不确定执行此操作的"正确"方法-只是获取新数据并将其保存的最简单方法。我会做一个自定义控件并将其添加到每一行吗?任何帮助表示赞赏。
解决方案
回答
有一些控件可以为我们做到这一点,其复杂程度取决于它们的相对灵活性。
传统的方法是使用DataGrid控件,该控件为我们提供表格布局。如果我们想要外观更灵活的东西,DataList和ListView控件还内置了对编辑,插入或者删除字段的支持。
查看Matt Berseth的博客,了解一些出色的asp.net控件实际示例。
回答
如今,我们可以真正作弊,并看看.NET 3.5 SP1附带的新动态数据。 Scott Guthrie的博客条目演示了如何在这里为我们快速便捷地进行操作:
http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx
在没有获得最前沿优势的情况下,我将使用XSD生成器来生成与所讨论表一致的强类型数据集。这还将生成TableAdapter,可用于执行所有CRUD语句。
从那里,将其绑定到DataGrid并利用与其相关的所有标准模板/事件,例如EditIndex,SelectedIndex,RowEditing,RowUpdated等。
从.NET的1.0天初期开始,我就一直在这样做,并且随着Framework的每次更新,这种功能都变得越来越精简。
编辑:我也想对Matt Berseth博客也点头。我已经关注他很多东西了,这太好了!
回答
谢谢你们的答案。看起来,自定义DataGrid是可行的方法。对于任何ASP.NET新手,这就是我正在做的事情
<asp:DataGrid ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundColumn DataField="RuleID" Visible="False" HeaderText="RuleID"></asp:BoundColumn> <asp:TemplateColumn HeaderText="Category"> <ItemTemplate> <!-- in case we want to display an image --> <asp:Literal ID="litImage" runat="server"> </asp:Literal> <asp:DropDownList ID="categoryListDropdown" runat="server"></asp:DropDownList> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid>
这将创建一个数据网格。然后,我们可以将其绑定到数据源(本例中为DataTable),并使用类似
foreach (DataGridItem item in this.GridView1.Items) { DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown")); categoryListDropdown.Items.AddRange(listItems.ToArray()); }
在数据网格中填充初始下拉列表。在这种情况下,我们还可以访问item.Cells [0] .text以获取RuleID。
自己注意:ASP.NET模型在代码隐藏文件中执行所有操作。在较高级别,我们始终可以遍历GridView1.Items以获取每一行,还可以遍历item.findControl(" ControlID")来查询存储在每个项目中的值,例如在按下"更新"按钮之后。