1

我来自 Rails 背景,在 ASP.NET 项目(不是 ASP MVC)上做一些工作。新手问题:为记录表制作自定义编辑器的最简单方法是什么?

例如:我有一堆数据行,并且想更改每个数据行上的“类别”字段——可能是一个下拉列表,可能是一个链接,可能是用户输入的。

在 Rails 中,我会遍历行来构建一个表,并且每行都有一个表单。该表单将有一个输入框或下拉列表,并将数据提交给像“/item/edit/15?category=foo”这样的控制器,其中 15 是 itemID,新类别是“foo”。

我是 ASP.NET 模型的新手,不确定执行此操作的“正确”方法——这只是取回新数据并将其保存的最简单方法。我会制作一个自定义控件并将其附加到每一行吗?任何帮助表示赞赏。

4

3 回答 3

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 博客快速点头。我一直在关注他的很多东西有一段时间了,这很棒!

于 2008-08-15T20:42:30.230 回答
0

有一些控件可以为您执行此操作,其复杂程度取决于它们的相对灵活性。

执行此操作的传统方法是 DataGrid 控件,它为您提供表格布局。如果您想要外观更灵活的东西,DataList 和 ListView 控件还具有对编辑、插入或删除字段的内置支持。

查看Matt Berseth 的博客,了解一些实际使用的 asp.net 控件的优秀示例。

于 2008-08-15T20:39:45.320 回答
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") 查询存储在每个项目中的值,例如在按下“更新”按钮之后。

于 2008-08-15T23:11:50.100 回答