Ir al contenido principal

Obtener el valor de un control ASPxSpinEdit dentro de un ASPxGridView

Para obtener el valor de un control ASPxSpinEdit dentro de un ASPxGridView


-Agregar un control ASPxSpinEdit dentro del DataItem Template


-Hacer que se muestren los datos de la fuente poniendo en el atributo value la expressión siguiente: '<%# Bind("GroupCode") %>'  donde GroupCode es el nombre de la columna en la fuente de datos.


-Hacer que el evento ValueChanged se procese en el servidor agregando lo siguiente en los eventos del cliente:
 <ClientSideEvents ValueChanged="function(s, e) {
 e.processOnServer = true;
}" />



El markup completo de la columna quedaría así:
<dx:GridViewDataTextColumn Caption="Grupo" FieldName="GroupCode" ShowInCustomizationForm="True" VisibleIndex="4">
   <PropertiesTextEdit DisplayFormatInEditMode="True" DisplayFormatString="g">

   </PropertiesTextEdit>
   <DataItemTemplate>
      <dx:ASPxSpinEdit ID="spinEditGroup" runat="server" Height="21px"
ClientInstanceName="spinEditGroup" Value='<%# Bind("GroupCode") %>'
                                            onvaluechanged="spinEditGroup_ValueChanged" >

   <ClientSideEvents ValueChanged="function(s, e)
         { e.processOnServer = true;
   }" />
      </dx:ASPxSpinEdit>
   </DataItemTemplate>
</dx:GridViewDataTextColumn>



-Por último para leer el dato contenido dentro del control hay que hacerlo de la siguiente manera: 
GridViewDataColumn gv = this.grvHarnessItems.Columns["Grupo"] as GridViewDataColumn;
 ASPxSpinEdit spinEditGroup = this.grvHarnessItems.FindRowCellTemplateControl(i, gv, "spinEditGroup") as ASPxSpinEdit;
  miValor = spinEditGroup.Value.ToString();



El dato deseado se encontrará en la variable miValor.


Con este procedimiento se cargará la página cada vez que cambiemos el valor de un AspxSpinEdit; si deseamos hacer la captura de todos los valores dentro del ASPxSpinEdit en el cliente y obtener los valores al final (por ejemplo: al presionar el botón Grabar), no usaremos los eventos del cliente y obtendremos los valores de los controles iterando a traves de los registros del ASPxGridview tal y como se muestra en el siguiente ejemplo:

String value = String.Empty;
   if (this.grvHarnessItems.VisibleRowCount > 0)
{
      for (int i = 0; i < this.grvHarnessItems.VisibleRowCount; i++)
    {
    int rowKey;
    rowKey = Convert.ToInt32(this.grvHarnessItems.GetRowValues(Convert.ToInt32(i), "GroupCode"));

    ASPxSpinEdit spinEditGroupCode = (ASPxSpinEdit)grvHarnessItems.FindRowCellTemplateControl(i, (GridViewDataColumn)grvHarnessItems.Columns["Grupo"], "spinEditGroupCode ");
                    value += spinEditGroupCode .Text + ", ";
    }
  }



Los valores obtenidos de los controles estarán en el String value separados por comas.

Comentarios

Entradas más populares de este blog

Eliminar registros repetidos de una DataTable

A continuación les muestro un ejemplo de como eliminar los registros repetidos de una DataTable . //DataTable con los reqistros repetidos (myRepeatedData) //Filtramos los registros únicos en la variable var. var uniqueRows = myRepeatedData.AsEnumerable().Distinct(DataRowComparer.Default); //Lo copiamos a otra DataTable DataTable myUniqueData = uniqueRows.CopyToDataTable(); Con esto tendremos en la DataTable myUniqueData los registros únicos.

Mostrar un Loading Panel al cargar y al procesar los datos que consuman mucho tiempo de proceso

Primero hay que crear el Panel como en el siguiente ejemplo: <dx:ASPxLoadingPanel ID="loadingPanel" ClientInstanceName="loadingPanel" runat="server" Modal="true"         Width="70%" Height="30px" Text="Se está procesando su petición; por favor no abandone la sesión porque podría tener inconsistencia en sus datos..." >     </dx:ASPxLoadingPanel> Crear una función con Javascript que muestre el panel :  function showLoadingPanel() {         loadingPanel.Show();     } Si se desea que solo muestre el panel encima de un control como el ASPxGridview se puede usar el método ShowInElementByID del Panel: function showLoadingPanel() {         loadingPanel.ShowInElementByID(grvHarnessItems.name);     } Crear una función con Javascript que esconda el panel:   function OnControlsInitialized(s, e) {         setTimeout(function () {   ...