如何启用就地编辑在一个asp:GridView的?(How to enable in-place e

2019-06-25 13:42发布

我如何添加编辑框,并阅读他们的价值观中提出,用asp:Repeater


我有一个asp:GridView其显示只读(即不可编辑)组数据,例如:

我怎样才能使的细胞GridView可编辑,如(Photoshop的样机):

注:我没有在Photoshop中编辑框中实体模型到每一个行和列(因为它时间太长)。 你仍然可以得到的想法。

  • 我怎样才能说服一个asp:GridView来显示每个单元一个编辑框?
  • 如果我做说服asp:GridView显示一个编辑框,我如何“读”出来OnClick 保存按钮的?

奖金颤振

我不会反对使用asp:Repeater ,手动放置<INPUT>对照。 然后我的困惑是如何在过程中读取每个输入OnClick 保存按钮。 虽然我将非常乐意使用一个中继器,和一个GridView可能无法完成我想要做的中继器的唯一可能性,这个问题是关于一个GridView。

  • 如果在GridView 可以做到这一点:伟大的; 怎么样?
  • 如果在GridView 不能做到这一点:这是一个答案了。

Answer 1:

你必须通过设立试图EditIndex的财产DataGrid

例:

<asp:GridView runat="server" onrowediting="grdProducts_RowEditing" 
    ID="grdProducts">
    <Columns>
        <asp:CommandField ShowEditButton="True" />
    </Columns>
</asp:GridView>

后面的代码

    protected void grdProducts_RowEditing(object sender, GridViewEditEventArgs e)
    {
        this.grdProducts.EditIndex = e.NewEditIndex;
        This.BindGrid();
    }

请注意,您必须重新绑定网格

通常您节省每行,这意味着,你必须编辑链接各行中,你进入编辑模式后,保存按钮和可选的取消按钮出现,让您保存在特定行的值的数据

使用时,按照这一办法是微不足道GridView

    protected void grdProducts_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        // old values for the current row
        var oldValues = e.OldValues;

        // new (updated) values for the current row
        var newvalues = e.NewValues;

        // Exit edit mode
        this.grdProducts.EditIndex = -1;

        // Update the grid
        this.BindGrid();
    }

在网格标记只需添加以下内容:

    onrowupdating="grdProducts_RowUpdating"

如果你需要指定定制控件编辑或显示在只读模式,使用网格模板单元格数据时,当:

       <Columns>
        <asp:TemplateField HeaderText="Name">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
      </Columns>


Answer 2:

为此,您可以使用一个GridView,但如果你有很多列,你会产生相当多的代码。

首先要在GridView模板列中的所有列。 在我的例子,我将只使用一列。 像这样:

<asp:GridView ID="test" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField HeaderText="Foo" SortExpression="foo">
            <ItemTemplate>
                <asp:TextBox ID="FooText" runat="server" Text='<%# Eval("Foo") %>'></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <!-- other cols here -->
    </Columns>
</asp:GridView>
<asp:Button ID="Save" runat="server" Text="Save" OnClick="Save_Click" />

然后在后面的保存按钮,你可以遍历在GridView行的代码:

foreach (GridViewRow gvRow in test.Rows)
{
    string val = ((TextBox)gvRow.FindControl("FooText")).Text;
    <!-- other cols here -->
    //do something with all the values you have parsed from the row
}


文章来源: How to enable in-place editing in an asp:GridView?