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

时间:2008-08-15 20:30:38

标签: asp.net

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

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

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

我是ASP.NET模型的新手,并不确定这种方式的“正确”方法 - 这是获取新数据的最简单方法。把它救出来。我会制作自定义控件并将其附加到每一行吗?任何帮助表示赞赏。

3 个答案:

答案 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”)可以查询存储在每个项目中的值,例如在按下“更新”按钮之后。