我来自Rails背景并在ASP.NET项目(而不是ASP MVC)上做一些工作。新手问题:为记录表制作自定义编辑器的最简单方法是什么?
例如:我有一堆数据行,想要更改每个数据行的“类别”字段 - 可能是一个下拉列表,也许是一个链接,可能是用户输入的。
在Rails中,我会迭代行来构建一个表,并且每行都有一个表单。表单将有一个输入框或下拉列表,并将数据提交给控制器,如“/ item / edit / 15?category = foo”,其中15是itemID,新类别是“foo”。
我是ASP.NET模型的新手,并不确定这种方式的“正确”方法 - 这是获取新数据的最简单方法。把它救出来。我会制作自定义控件并将其附加到每一行吗?任何帮助表示赞赏。
答案 0 :(得分:2)
现在你真的可以作弊,看一看.NET 3.5 SP1附带的新动态数据。 Scott Guthrie在博客文章中演示了如何快速轻松地为您提供:
http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx
如果没有获得最新优势,我将使用XSD生成器生成与所讨论的表一致的强类型DataSet。这也将生成可用于执行所有CRUD语句的TableAdapter。
从那里,将它绑定到DataGrid并利用与之相关的所有标准模板/事件,例如EditIndex,SelectedIndex,RowEditing,RowUpdated等。
自.NET早期开始1.0天以来,我一直在这样做,这种功能只有在每次更新框架时都会得到越来越多的简化。
编辑:我想快速点头看看Matt Berseth的博客。我一直在关注他的很多东西,现在很棒!答案 1 :(得分:0)
有一些控件会为您执行此操作,具有不同的复杂程度,具体取决于它们的相对灵活性。
执行此操作的传统方法是DataGrid控件,它为您提供表格布局。如果你想要一些外观更灵活的东西,DataList和ListView控件也有内置的支持编辑,插入或删除字段。
查看Matt Berseth's blog以了解一些优秀的asp.net控件示例。
答案 2 :(得分:0)
谢谢你的回答。看起来自定义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”)可以查询存储在每个项目中的值,例如在按下“更新”按钮之后。