Sé que puede poner <% if%> declaraciones en el ItemTemplate para ocultar los controles, pero la columna aún está allí. No puede poner <%%> declaraciones en LayoutTemplate, que es donde se declaran los encabezados de columna, de ahí el problema. ¿Alguien sabe de una mejor manera?¿Alguien sabe de una forma de ocultar una columna en una lista de listas asp.net?
Respuesta
Aquí hay otra solución que acabo de hacer, viendo que entiendo lo que quieres hacer:
Aquí está tu ASCX/ASPX
<asp:ListView ID="ListView1" runat="server" DataSourceID="MyDataSource" ItemPlaceholderID="itemPlaceHolder" OnDataBound="ListView1_DataBound">
<LayoutTemplate>
<table border="1">
<tr>
<td>Name</td>
<td>Age</td>
<td runat="server" id="tdIsSuperCool">IsSuperCool</td>
</tr>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("Name") %></td>
<td><%# Eval("Age") %></td>
<td runat="server" id="myCol" visible='<%# (bool)Eval("IsSuperCool") %>'>true</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:ObjectDataSource
ID="MyDataSource"
runat="server"
DataObjectTypeName="BusinessLogicLayer.Thing"
SelectMethod="SelectThings"
TypeName="BusinessLogicLayer.MyObjectDataSource" />
Aquí está el código detrás de
/// <summary>
/// Handles the DataBound event of the ListView1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void ListView1_DataBound(object sender, EventArgs e)
{
ListView1.FindControl("tdIsSuperCool").Visible = false;
}
Haga lo que quiera en el databound. Como la columna ahora es runat server, y está manejando el DataBound del control, cuando hace ListView1.FindControl ("tdIsSuperCool") está en la plantilla de diseño para que funcione como un campeón.
Ponga la lógica de negocio que desee para controlar la visibilidad de la td y está bien.
Siempre puede establecer el ancho de la columna en 0 (cero) si no encuentra una mejor manera.
no puedo conseguir una columna
La lista de la lista realmente no tiene un concepto de 'columna', ya que está destinado a ser, bueno, una lista.
Voy a suponer que está utilizando enlace de datos para adjuntar una lista de "algo" al ListView. Si ese es el caso, entonces solo tendrá una lista de elementos y el html en LayoutTemplate decidirá exactamente cómo se muestran esos elementos. Si está hablando de crear una matriz de filas y columnas estilo tabla, tal vez una opción DataGrid sea una mejor opción, ya que proporciona un control mucho más programático de las columnas específicas.
Es posible que desee crear el diseño de la tabla por completo a través de CSS, que es una decisión admirable si es exclusivamente para fines de diseño. Sin embargo, su requisito de ocultar específicamente una columna me indica que una tabla está mejor ubicada para satisfacer sus necesidades. Está bien usar tablas para datos tabulares ... EN MI ...
Si realmente necesita usar un ListView, entonces siempre puede intentar vincular algo en sus datos que determina si un elemento se debe mostrar o no, por ejemplo:
style='display: <%#Eval("DisplayStyle") %>;'
colocar este código en el elemento hTML que desea controlar (en el LayoutTemplate). Luego, en el objeto al que se está vinculando, necesitaría una propiedad 'DisplayStyle' que estaba configurada como 'block' o 'none'.
El problema es que no puede agregar bloques de código dentro de LayoutTemplate, por lo que no puedo ver cómo elimina la fila de encabezado. –
ListView le da un control total sobre cómo se representan los datos al cliente. Usted especifica la Plantilla de diseño y le da un marcador de posición que será donde se inyecta cada elemento.
La salida de abajo le dará una tabla, y cada artículo será un nuevo TR.
Aviso el uso de runat = 'servidor' y visible ='<%# %>'
<asp:ListView ID="ListView1" runat="server" DataSourceID="MyDataSource" ItemPlaceholderID="itemPlaceHolder">
<LayoutTemplate>
<table>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td runat="server" id="myCol" visible='<%# (bool)Eval("IsSuperCool") %>'>
<%# Eval("SuperCoolIcon") %>
</td>
<td>
<%# Eval("Name") %>
</td>
<td>
<%# Eval("Age") %>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
Tengo una fila de encabezado en LayoutTemplate y no puede agregar bloques de código dentro de LayoutTemplate. ¿Hay alguna otra forma de especificar los encabezados de columna? –
trate de usar un panel y se puede activar/Off
foreach (ListViewItem item in ListView1.Items)
{
((Panel)item.FindControl("myPanel")).Visible= False;
}
encontré que poner un panel en las tablas para mostrar y ocultar columnas rompe el XHTML colocando div entre las etiquetas tr/td. Tal vez no sea un problema para ti, pero hace que nuestros desarrolladores de HTML se impacienten. –
Utilicé la respuesta aceptada para las celdas de encabezado th pero las celdas de contenido td provocaron que la página fallara (temida página en blanco) si les agregué 'runat =' server '' . Creo que es porque contienen DropDownLists y Buttons, etc. Las celdas simples estaban bien. Utilicé la solución de panel de Fred para ocultar las celdas de la tabla. – Resource
Para acceder al texto de la plantilla de diseño encabezado de la columna, los hice etiquetas de la plantilla, y no un FindControl en el prerender de la vista de lista , luego convirtió las etiquetas en texto en blanco si la columna debe estar "desactivada". Puede que esto no funcione para tus intenciones, pero para mí aún quería que se utilizara el espacio de columnas, simplemente aparece en blanco.
Mientras más se esfuerce por hacer que una vista de lista se incline hacia atrás, más deseará utilizar una cuadrícula.
¿tiene algún código que pueda proporcionar? – toxicate20
Sé que es una pregunta muy antigua, pero en realidad tengo que hacer esto y creo que encontré una forma bastante buena de hacerlo a través de jquery y css.
Añadir lo siguiente a la cabecera:
<script type="text/javascript" src="Scripts/jquery-1.7.1.min.js" ></script>
<style>
.hide {
display:none;
}
.show {
display:block;
}
</style>
Para todas las columnas que desea ocultar, agregar una propiedad personalizada para el TD/th.
<th runat="server" data-prop='authcheck' id="tdcommentsHeader" >Comments</th>
estoy aconsejando a utilizar una propiedad personalizada porque, cuento largo, que puede matar a un montón de pájaros de un tiro. Ni siquiera necesitará cambiar el valor de cada columna, como lo haría si basamos esto en la propiedad de id.
A continuación, asegúrese de tener un campo oculto que le indica si desea ocultar o no la columna. Esto puede ser un asp: HiddenField o cualquier otro, siempre que esté en el formulario.
<asp:HiddenField runat="server" ID="IsAuthorized" Value="false" />
Por último, en la parte inferior de la página, hacer:
<script type="text/javascript">
$(document).ready(function() {
var isauth = $("[id='IsAuthorized']").val();
if (isauth==="false") {
$("[data-prop='authcheck']").addClass('hide');
//$("[id*='tdcomments']").addClass('hide');
}
});
</script>
- 1. Ocultar una columna en ASP.NET Dynamic Data
- 2. una lista> una lista de listas
- 3. Cortar una lista en una lista de sub-listas
- 4. ¿Alguien sabe una manera de mezclar los elementos en una lista?
- 5. Aplanar una lista de listas
- 6. ¿Alguien sabe de una base de datos gratuita en línea?
- 7. convertir una lista de listas en una sola lista
- 8. lisp: consolidar una lista de listas en una sola lista?
- 9. Listas únicas de una lista
- 10. ¿Alguien sabe de una biblioteca en Java que pueda analizar los archivos de forma de ESRI?
- 11. ¿Alguien sabe de una herramienta de análisis de CSS?
- 12. ¿Alguien sabe de una aplicación de traducción colaborativa de OpenSource?
- 13. Crear una lista de listas en C#
- 14. ¿Alguien sabe de una biblioteca de texto java2d?
- 15. ¿Alguien sabe de una buena API de C# para Subversion?
- 16. ¿Alguien sabe una buena API de sistema de archivos?
- 17. Replicar una lista para crear una lista de listas
- 18. ¿Alguien sabe de una lista de delegados ya incorporada en el marco?
- 19. rbind dataframes en una lista de listas
- 20. Extendiendo una lista de listas en Python?
- 21. Método para ordenar una lista de listas?
- 22. ¿Cómo ocultar una columna de Excel?
- 23. ¿Alguien sabe de un proceso para convertir una fila en una instrucción INSERT?
- 24. transposición de una lista de listas
- 25. ¿Alguien sabe de una implementación exitosa del patrón Blackboard?
- 26. Permutaciones de una lista de listas
- 27. ¿Alguien sabe de una biblioteca mysql asíncrona para python?
- 28. ¿Alguien sabe de una buena guía para obtener Ninject 2 trabajando en ASP.NET MVC?
- 29. ¿Alguien sabe de una biblioteca C/C++ Unix QR-Code?
- 30. Eliminar una propiedad/columna de una lista genérica
Gracias, estaba buscando en todas partes para esto. – Bert
Exactamente lo que necesitaba también ... ¡Gracias! –
Para ocultar el TD dentro de la lista, tuve que iterar a través de ListView.Items luego 'HtmlControl tdColumn = listView.Items [i] .FindControl (" tdColumn ") como HtmlControl;' -> 'if (tdColumn! = Null) {tdColumn.Visible = false; } 'Esto se hizo después de que los artículos fueran datos enlazados. –