radlistview net mvc dal asp asp.net listview

asp.net - mvc - telerik demo asp net



¿Alguien sabe de una forma de ocultar una columna en una lista de listas asp.net? (7)

Aquí hay otra solución que acabo de hacer, dado que entiendo lo que quieres hacer:

Aquí está su 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

/// <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; }

Haz lo que quieras 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.

Pon la lógica de negocios que quieras para controlar la visibilidad de la td y estás bien.

Sé que puede poner declaraciones <% if%> en la plantilla del elemento para ocultar los controles, pero la columna todavía está allí. No puede poner declaraciones <%%> en LayoutTemplate, que es donde se declaran los encabezados de las columnas, de ahí el problema. ¿Alguien sabe de una mejor manera?


La vista de 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" a 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.

Puede ser que esté esperando crear el diseño de la tabla por completo a través de CSS, lo cual es una decisión admirable si es solo por propósitos 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 humilde opinión ...

Si realmente necesita usar un ListView, entonces siempre puede probar el enlace contra algo en sus datos que determina si un elemento debe mostrarse o no, por ejemplo:

style=''display: <%#Eval("DisplayStyle") %>;''

Coloque este código dentro del elemento html que desea controlar (en LayoutTemplate). Luego, en el objeto al que se está vinculando, necesitaría una propiedad ''DisplayStyle'' que estaba configurada como ''block'' o ''none''.


ListView le brinda control total sobre cómo se procesan los datos para el 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.

Observe el uso de runat = ''server'' 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>


Siempre puede establecer el ancho de la columna en 0 (cero) si no encuentra una mejor manera.


Intente usar un panel y puede activarlo / desactivarlo

foreach (ListViewItem item in ListView1.Items) { ((Panel)item.FindControl("myPanel")).Visible= False; }


Para acceder al texto del encabezado de la columna de la plantilla de diseño, les hice etiquetas en la plantilla e hice un control de búsqueda en la presentación previa de la vista de lista, y luego convertí las etiquetas en texto en blanco si la columna debería 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.

Cuanto más avanzas intentes hacer que una vista de lista se doble hacia atrás, más desearás utilizar una cuadrícula.


Sé que es una pregunta muy antigua, pero en realidad tengo que hacer esto y creo que encontré una manera bastante buena de hacerlo a través de jquery y css.

Agregue lo siguiente al encabezado:

<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, agregue una propiedad personalizada a la td / th.

<th runat="server" data-prop=''authcheck'' id="tdcommentsHeader" >Comments</th>

Aconsejo usar una propiedad personalizada porque, en pocas palabras, puede matar a un grupo 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 indique 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" />

Finalmente, en la parte inferior de la página, hazlo:

<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>