可编辑的数据网格?中继?

时间:2008-11-08 18:24:46

标签: asp.net gridview repeater

我在asp.net中显示了一个项目列表 - 每个项目(行)将有3个文本框,因此用户可以查看和更改该数据(运费,处理成本,价)。

实现这一目标的“推荐”方法是什么?使用转发器,我假设我必须在回发时循环遍历表单值,并且使用gridview控件我必须覆盖onrowdatabound并在Postback上使用其他方法。

我确信两者都有效,但作为开发者,您在这种情况下选择了什么?

1 个答案:

答案 0 :(得分:1)

我过去所做的是使用数据绑定的GridView TemplateColumns:

<asp:GridView runat="server" ID="grdRoster" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField HeaderText="First Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtFirstName" Columns="10" Text='<%# Eval("RosterFirstName") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Middle Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtMiddleName" Columns="10" Text='<%# Eval("RosterMiddleName") %>' />
            </ItemTemplate>
        </asp:TemplateField>                       
        <asp:TemplateField HeaderText="Last Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtLastName" Columns="10" Text='<%# Eval("RosterLastName") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

然后,在回发时(例如,单击“保存”按钮),您可以遍历GridView中的行并从文本框中提取值:

foreach ( GridViewRow row in grdRoster.Rows )
{
    if ( row.RowType == DataControlRowType.DataRow )
    {
        string firstName = ( ( TextBox ) row.FindControl( "txtRosterFirstName" ) ).Text;
        string middleName = ( ( TextBox ) row.FindControl( "txtRosterMiddleName" ) ).Text;
        string lastName = ( ( TextBox ) row.FindControl( "txtRosterLastName" ) ).Text;
    }
}