在ASP.NET中自定义编辑记录的最佳方法?

在ASP.NET中自定义编辑记录的最佳方法?,asp.net,Asp.net,我来自Rails背景,在ASP.NET项目(不是ASP MVC)上做一些工作。新手问题:为记录表定制编辑器的最简单方法是什么 例如:我有一堆数据行,希望更改每个行上的“category”字段——可能是下拉列表,可能是链接,可能是用户键入的 在Rails中,我会遍历行来构建一个表,并且每行都有一个表单。表单将有一个输入框或下拉列表,并将数据提交给“/item/edit/15?category=foo”这样的控制器,其中15是itemID,新类别是“foo” 我是ASP.NET模型的新手,不确定使用

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

例如:我有一堆数据行,希望更改每个行上的“category”字段——可能是下拉列表,可能是链接,可能是用户键入的

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


我是ASP.NET模型的新手,不确定使用哪种“正确”的方法来实现这一点——这只是获取新数据并保存它的最简单方法。我会创建一个自定义控件并将其附加到每一行吗?非常感谢您的帮助。

有一些控件可以为您实现这一点,其复杂程度取决于它们的相对灵活性

实现这一点的传统方法是DataGrid控件,它为您提供了一个表布局。如果您希望在外观上更灵活,DataList和ListView控件还内置了对编辑、插入或删除字段的支持


请查看一些asp.net控件的优秀示例。

您现在真的可以作弊,看看.net 3.5 SP1附带的新动态数据。Scott Guthrie有一篇博客文章,在这里演示如何快速轻松地为您提供服务:

在没有这种尖端技术的情况下,我会使用XSD生成器生成与所讨论的表一致的强类型数据集。这还将生成可用于执行所有CRUD语句的TableAdapter

从那里,将其绑定到DataGrid,并利用与之相关的所有标准模板/事件,如EditIndex、SelectedIndex、RowEditing、RowUpdate等

从.NET的早期1.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>
在数据网格中填充初始下拉列表。您还可以访问item.Cells[0].text以获取本例中的规则ID

我自己注意:ASP.NET模型完成了代码隐藏文件中的所有工作。在较高级别上,您始终可以遍历GridView1.Items以获取每一行,并遍历item.findControl(“ControlID”)以查询存储在每个项上的值,例如在按下“更新”按钮之后

foreach (DataGridItem item in this.GridView1.Items)
{
     DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown"));
     categoryListDropdown.Items.AddRange(listItems.ToArray());
}