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 Comentarios

  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.

Dejar respuesta

Please enter your comment!
Please enter your name here