2011-08-24 170 views
8

Estoy usando una vista de cuadrícula Editar para editar los valores que tengo en mi vista de cuadrícula, cuando presiono editar, todas las columnas pueden ser editadas, me gustaría que una de las columnas no esté permitida para ser editadoGridview deshabilitar edición en 1 columna asp.net

¿Hay alguna manera de que pueda hacer esto?

Thiss es mi código aspx:

<asp:GridView 

ID="GridView1" 
runat="server" 
AllowSorting="True" 
OnRowCommand="GridView1_SelectedIndexChanged1" 
AutoGenerateEditButton="True" 
OnRowCancelingEdit="GridView1_RowCancelingEdit" 
CellSpacing="10" 
OnRowUpdating="GridView1_RowUpdating" ShowFooter="True" 
onselectedindexchanged="GridView1_SelectedIndexChanged" 
OnRowEditing="GridView1_RowEditing"> 



</asp:GridView> 

Gracias

+0

como estas encuadernación del gridview. TemplateField o BoundField? – naveen

Respuesta

4

Claro, haga uso de EditItemTemplate . En el siguiente ID ejemplo campo no se pueden editar en el modo de edición:

<asp:GridView runat="server"> 
    <Columns> 
     ... 
     <asp:TemplateField HeaderText="ID"> 
      <EditItemTemplate> 
       <%# Eval("ID") %> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     ... 
    </Columns> 
</asp:GridView> 
+0

Esto funciona, pero crea otra columna y no hace que la actual solo lea – Karl

+1

Eso es porque la propiedad predeterminada de GridView 'AutoGenerateColumns' está establecida en verdadero. Por lo tanto, genera columnas para cada propiedad del objeto que se proporciona como un DataItem y agrega la columna declarada (ID en nuestro caso). No hay manera de que pueda afectar el comportamiento de las columnas generadas automáticamente. Si quieres algo personalizado (como deshabilitar la edición en una determinada columna) debes desactivar la generación automática de columnas y declarar todo lo que necesites usando BoundField, TemplateField, etc. – Andrei

0

favor muestran algunas marcas. Rápido y sucio creo que dependiendo de su aspx de marcado puede eliminar el cuadro de texto de la plantilla EditItem para la columna que desea evitar la edición ... también hay otras soluciones, por supuesto :)

+0

vea mi edición – Karl

20

Si está utilizando asp:BoundField, tratan

<asp:BoundField DataField="CustomerID" 
     ReadOnly="true"  
     HeaderText="Customer ID"/> 

O bien si está utilizando asp:TemplateField, puede

  1. Renderícelo ya sea en un asp:Label dentro EditItemTemplate
  2. Omitir la EditItemTemplate para esa columna por completo
+0

estoy usando databind, estoy tratando de usar tu boundfield pero me está diciendo que no se encuentra – Karl

+1

ver este ejemplo. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.aspx BoundField debe estar dentro de 'Columns' – naveen

+0

Esta es la mejor solución si está utilizando boundfields. Y si es posible, coloque los campos no editables en BoundField. – MindLoggedOut

0

Si está utilizando campo de la plantilla

((TemplateField)gvGridView.Columns[index]).EditItemTemplate = null; 

si BoundField

((BoundField)gvGridView.Columns[index]).ReadOnly = true; 
Cuestiones relacionadas