Pregunta

Estamos utilizando los controles GridView en algunas páginas de nuestro proyecto que no queremos cambiar drásticamente, ¿sería posible crear una jerarquía en una vista de cuadrícula? ¿Se puede lograr esto usando un GridView dentro de un Gridview para obtener la relación padre-hijo?

¿Fue útil?

Solución

Sí, puede anidar GridViews uno dentro del otro. Vea el siguiente artículo.

Nesting GridViews

Otros consejos

sí puedes, y es bastante fácil ...

el mejor enfoque es tener algunos ObjectDataSource para que todo el proceso sea más fácil para usted, o por supuesto, puede vincular la vista de cuadrícula en el evento OnRowDataBound de vista de cuadrícula paraentrada, todo depende de usted:)

ejemplo:

<asp:GridView ID="gvGrandFather" runat="server" DataSourceID="odsGrandFather">
    <Columns>
        <asp:BoundField DataField="myField1" HeaderText="myText1" />
        <asp:BoundField DataField="myField2" HeaderText="myText2" />
        <asp:BoundField DataField="myField3" HeaderText="myText3" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:GridView ID="gvFather" runat="server" DataSourceID="odsFather">
                    <Columns>
                        <asp:BoundField DataField="myField1" HeaderText="myText1" />
                        <asp:BoundField DataField="myField2" HeaderText="myText2" />
                        <asp:BoundField DataField="myField3" HeaderText="myText3" />
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:GridView ID="gvSon" runat="server" DataSourceID="odsSon">
                                    <Columns>
                                        <asp:BoundField DataField="myField1" HeaderText="myText1" />
                                        <asp:BoundField DataField="myField2" HeaderText="myText2" />
                                        <asp:BoundField DataField="myField3" HeaderText="myText3" />
                                    </Columns>
                                </asp:GridView>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

<asp:ObjectDataSource ID="odsGrandFather" runat="server" DataObjectTypeName="Company" TypeName="CompanyDAO" SelectMethod="FindAll" />
<asp:ObjectDataSource ID="odsFather" runat="server" DataObjectTypeName="Employees" TypeName="EmployeesDAO" SelectMethod="FindByID">
    <SelectParameters>
        <asp:Parameter Name="myFieldInCompanyObject" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="odsSon" runat="server" DataObjectTypeName="Person"TypeName="PersonsDAO" SelectMethod="FindByID">
    <SelectParameters>
        <asp:Parameter Name="myFieldInEmployeesObject" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

imagina que tienes el objeto de tu Compañía como

Company
  Field1
  Field2
  Field3
  Employees witch is List<Person>
    Field1
    Field2
    Field3
    Person  witch is List<Person>
      Field1
      Field2
      Field3

Todo lo que necesita hacer es el DAO para cada uno y devolver la lista o el objeto en sí como

public class CompanyDAO
{
    private List<Company> Companies
    {
        get
        {
            List<Company> companies = HttpContext.Current.Session["Companies"] as List<Company>;
            if (companies == null)
                companies = new List<Company>();
            return companies;
        }
    }
    public CompanyDAO() { }

    [DataObjectMethod(DataObjectMethodType.Select)]
    public IEnumerable<Company> FindAll()
    {
        return this.Companies;
    }

    [DataObjectMethod(DataObjectMethodType.Select)]
    public IEnumerable<Company> FindByID(String CompanyID)
    {
        return (from c in this.Companies where c.ID == CompanyID select c).ToList();
    }
}

espero que ayude a ver la luz al final del túnel;)

Echa un vistazo a Telerik, su RadGrid tiene este tipo de cosas listas para usar (jerarquía anidada y tablas de detalles)

http://demos.telerik.com/aspnet -ajax / Grid / Ejemplos / Descripción general / DefaultCS.aspx

Buenos artículos sobre esto aquí que usa ASP.NET AJAX y AJAX Control Toolkit para que sea plegable.

Los GridView son bastante estáticos. Usamos XSLT si las tablas van a ser más complejas, por lo que tenemos el control final sobre ellas. De lo contrario, Microsoft proporcionará otros controles ASP.NET, como el DataRepeater.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top