Agregar una Nueva Fila en el GridView

El siguiente código funciona muy bien pero mi pregunta es:

Cuando hago clic en añadir nuevo: en lugar de mostrar en el pie de página, hay una manera que puedo mostrar en la parte superior de todas las filas(como en la cabecera)? Si tengo 15 filas, la nueva fila en blanco va a ser todo el camino a la final, quiero hacer que sea fácil para el usuario y se muestran en la primera fila.

<asp:GridView ID="GridView1" runat="server" BackColor="White"
BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" AllowSorting="True" AutoGenerateColumns="False" ShowFooter="True" OnRowCommand="GridView1_RowCommand">
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
<RowStyle BackColor="White" ForeColor="#003399" />
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
<Columns>
<asp:BoundField DataField="PersonID" HeaderText="PersonID" />
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="Label1" Text='<%# Eval("Name") %>' runat="server"></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<asp:Button ID="Button1" CommandName = "ADD" runat="server"
Text="Add" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
InformationsquelleAutor Nick Kahn | 2011-07-13

2 Kommentare

  1. 2

    Podría mostrar el complemento de la fila de Encabezado y/o Pie de página, eche un vistazo a RowCreated-Evento.

    aspx:

    <asp:GridView ID="GridView1" runat="server" BackColor="White" BorderColor="#3366CC"
        BorderStyle="None" BorderWidth="1px" CellPadding="4" AllowSorting="True" AutoGenerateColumns="False"
        ShowFooter="True" OnRowCommand="GridView1_RowCommand" OnRowCreated="GridView1_RowCreated">
        <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
        <RowStyle BackColor="White" ForeColor="#003399" />
        <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
        <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
        <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
        <Columns>
            <asp:BoundField DataField="PersonID" HeaderText="PersonID" />
            <asp:TemplateField HeaderText="Name">
                <ItemTemplate>
                    <asp:Label ID="Label1" Text='<%# Eval("Name") %>' runat="server"></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
                    <asp:Button ID="BtnAdd" CommandName="ADD" runat="server" Text="Add" />
                </FooterTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

    Codebehind:

    Public Class GridViewAddRowTop
        Inherits System.Web.UI.Page
    
        Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
            If e.Row.RowType = DataControlRowType.Header Then
                Dim extraRow As New GridViewRow(1, -1, DataControlRowType.Header, DataControlRowState.Normal)
                Dim emptyCell As New TableCell()
                Dim tc As TableCell = New DataControlFieldCell(DirectCast(e.Row.Cells(0), DataControlFieldCell).ContainingField)
                Dim BtnAdd As New Button()
                Dim TxtName As New TextBox
                emptyCell.Controls.Add(New LiteralControl("&nbsp;"))
                extraRow.Cells.Add(emptyCell)
                TxtName.ID = "TxtName"
                tc.Controls.Add(TxtName)
                BtnAdd.ID = "BtnAdd"
                BtnAdd.CommandName = "ADD"
                BtnAdd.Text = "Add"
                tc.Controls.Add(BtnAdd)
                extraRow.Cells.Add(tc)
                DirectCast(sender, GridView).Controls(0).Controls.Add(extraRow)
            End If
        End Sub
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                Dim tbl = getDataSource()
                Me.GridView1.DataSource = tbl
                Me.GridView1.DataBind()
            End If
        End Sub
    
        Private Function getDataSource() As DataTable
            Dim tbl = New DataTable()
            Dim idColumn = New DataColumn("PersonID", GetType(Int32))
            idColumn.AutoIncrement = True
            tbl.Columns.Add(idColumn)
            tbl.Columns.Add(New DataColumn("Name", GetType(String)))
            For i As Int32 = 1 To 15
                Dim newRow = tbl.NewRow
                newRow("Name") = i & ".Name"
                tbl.Rows.Add(newRow)
            Next
            Return tbl
        End Function
    
        Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)
            If e.CommandName.ToUpper = "ADD" Then
                Dim tbl = getDataSource()
                Dim newRow = tbl.NewRow
                Dim bu As New Button
                Dim txtName = DirectCast(DirectCast(e.CommandSource, WebControl).NamingContainer.FindControl("txtName"), TextBox)
                newRow("Name") = txtName.Text
                tbl.Rows.Add(newRow)
                DirectCast(sender, GridView).DataSource = tbl
                DirectCast(sender, GridView).DataBind()
            End If
        End Sub
    
    End Class

    Nota: en este ejemplo se agrega una «agregar fila» a la HeaderRow(en la parte superior) y el FooterRow(quitar el FooterTemplate si se desea). Si desea añadir a continuación la autogenerado en el Encabezado de las Columnas, voy a tener que tener una mirada más en ti. Debido a que el Encabezado no existe en este momento en RowCreated, yo tenía el problema de agregar mi nueva fila debajo de ella.

    • es que crear el control dinámico? parece que, si no se puede mostrar después de la headerrow, a continuación, su mejor usar headertemplate correcta? entonces, ¿cuál es la diferencia?
    • Hamzah: el Uso de HeaderTemplate perderá el grupo builtin clasificación cababilities(Hipervínculo en columnas con SortExpression). Que tendría que hacer manualmente a diferencia de mi enfoque.
    • yo no estoy seguro de entender puede reformular
    • El uso de la HeaderTemplate para agregar la opción «Agregar Fila» se traducirá en la pérdida de la ordenación por defecto funcionalidades: Si AllowSorting para true y proporcionar la SortExpression en sus columnas, el GridView enlazará automáticamente en el encabezado. Al hacer clic en él, el Tipo de Eventos se activa.
    • para ello he añadido esta línea en GridView-RowCreated. Pero, por desgracia, va a agregar la fila a la parte de arriba y no debajo de la Cabecera. Si esto es suficiente para usted, mi enfoque.
  2. 0

    Has probado a poner el FooterTemplate marcado anteriormente en la HeaderTemplate? Que deben trabajar.

    • puedo poner la marca en el encabezado de la plantilla, pero cuando la página se carga automáticamente en el modo de entrada y además, no hay rumbo, obviamente, porque la voy a poner en el encabezado y lo que yo quiero es que cuando hago clic en «añadir nuevo», sólo me la fila para mostrar en el modo de entrada.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea