-Asignar el nombre de la instancia del cliente en el evento Init del Control protected void spinEditQty_Init(object sender, EventArgs e)
{
ASPxSpinEdit spinEdit = sender as ASPxSpinEdit;
GridViewDataItemTemplateContainer c = spinEdit.Parent as GridViewDataItemTemplateContainer;
spinEdit.ClientInstanceName = String.Format("spinEditQty{0}", c.KeyValue);
}
-Instanciar el control en el lado del cliente usando el nombre de instancia asignado anteriormente
var controlID = "spinEditQty" + id;
var name = eval(controlID);
-Modificamos alguna propiedad del control (en este caso la propiedad valor)
name.SetValue(12); //ponemos 12 como valor del control.
jueves, 17 de diciembre de 2015
Acceder a los valores y métodos de un control dentro de un ASPxGridView en el lado del cliente.
-Agregar una propiedad de JavaScript al control en el evento Init del Grid.
protected void chkCb_Init(object sender, EventArgs e)
{
ASPxCheckBox chk = sender as ASPxCheckBox;
GridViewDataItemTemplateContainer c = chk.Parent as GridViewDataItemTemplateContainer;
chk.JSProperties.Add("cpIndex", c.ItemIndex);
}
-Agregar el control dentro del DataItemTemplate del grid y agregar eventHandler OnChecked en el evento CheckedChanged del lado del cliente.
<dx:GridViewDataTextColumn Caption="CB" ShowInCustomizationForm="True"
VisibleIndex="0">
<DataItemTemplate>
<dx:ASPxCheckBox ID="chkCb" runat="server" CheckState="Unchecked"
ClientInstanceName="chkCb" oninit="chkCb_Init">
<ClientSideEvents CheckedChanged="OnChecked" />
</dx:ASPxCheckBox>
</DataItemTemplate>
</dx:GridViewDataTextColumn>
-Capturar el evento con JavaScript en el lado del cliente e implementar la lógica deseada.
function OnChecked(s, e) {
value = s.GetChecked();
if (value != true) {
// Código a ejectuar si el control está marcado
alert(s.CpIndex); //Esta propiedad es la que asignamos en el evento Init del control.
}
else {
// Código a ejectuar si el control no está marcado
alert(s.CpIndex); //Esta propiedad es la que asignamos en el evento Init del control.
}
}
protected void chkCb_Init(object sender, EventArgs e)
{
ASPxCheckBox chk = sender as ASPxCheckBox;
GridViewDataItemTemplateContainer c = chk.Parent as GridViewDataItemTemplateContainer;
chk.JSProperties.Add("cpIndex", c.ItemIndex);
}
-Agregar el control dentro del DataItemTemplate del grid y agregar eventHandler OnChecked en el evento CheckedChanged del lado del cliente.
<dx:GridViewDataTextColumn Caption="CB" ShowInCustomizationForm="True"
VisibleIndex="0">
<DataItemTemplate>
<dx:ASPxCheckBox ID="chkCb" runat="server" CheckState="Unchecked"
ClientInstanceName="chkCb" oninit="chkCb_Init">
<ClientSideEvents CheckedChanged="OnChecked" />
</dx:ASPxCheckBox>
</DataItemTemplate>
</dx:GridViewDataTextColumn>
-Capturar el evento con JavaScript en el lado del cliente e implementar la lógica deseada.
function OnChecked(s, e) {
value = s.GetChecked();
if (value != true) {
// Código a ejectuar si el control está marcado
alert(s.CpIndex); //Esta propiedad es la que asignamos en el evento Init del control.
}
else {
// Código a ejectuar si el control no está marcado
alert(s.CpIndex); //Esta propiedad es la que asignamos en el evento Init del control.
}
}
martes, 8 de diciembre de 2015
Forzar la entrada en una caja de texto en mayúsculas (o minúsculas)
Para forzar la entrada de texto en una caja de texto de ASP.NET en solo mayúsculas, solo hay que agregar el siguiente código en el evento onkeyup de la caja de texto: this.value=this.value.toUpperCase();
El markup de la caja de texto completo debe quedar de la siguiente manera:
<asp:TextBox ID="txtBoardCode" runat="server" onkeyup="this.value=this.value.toUpperCase();"
ValidationGroup="HarnessValidationGroup">
</asp:TextBox>
NOTA: Este código funciona igual para las minúsculas, solo hay que cambiar la function por toLowerCase();
El markup de la caja de texto completo debe quedar de la siguiente manera:
<asp:TextBox ID="txtBoardCode" runat="server" onkeyup="this.value=this.value.toUpperCase();"
ValidationGroup="HarnessValidationGroup">
</asp:TextBox>
NOTA: Este código funciona igual para las minúsculas, solo hay que cambiar la function por toLowerCase();
lunes, 7 de diciembre de 2015
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.
-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.
viernes, 4 de diciembre de 2015
Como escoger entre ViewState, Session, Cache y Cookies
Problemas con Aplicaciones Web
Las aplicaciones web son sin estado, lo que significa que una vez una página web es enviada desde servidor, nada permanece en el servidor y la próxima vez que el usuario actualiza la página, esta página será creada desde cero.
ASP.NET proporciona las siguientes soluciones para resolver este problema:
1- El ViewState.
2- Las variables de sesión.
3- Las variables de aplicación.
4- La memoria caché.
5- Las cookies.
Ahora surge la pregunta: ¿cuándo utilizar qué?
1- El ViewState.El ViewState es un campo oculto en una página ASP.NET, y contiene el estado de esos controles en una página cuya propiedad "EnableViewState" es "true".
También puede agregar explícitamente los valores en ella, como el siguiente ejemplo:
Viewstate.Add ("YearOrders", "5887");
El ViewState se debe utilizar cuando se quiere pasar un valor entre diferentes peticiones al servidor de una sola página y sus valores no son accesibles en cualquier otra página.
Debido Viewstate se renderiza con la página, consume ancho de banda, así que ten cuidado al utilizarlo en aplicaciones que corran con un bajo ancho de banda.
2- Las variables de session.
Las variables de sesión son las más utilizadas.
Cuando un usuario visita un sitio, se inicia la sesión y cuando el usuario permanece un tiempo inactivo o deja el sitio, finaliza la sesión.
Las variables de sesión se deben utilizar para guardar y recuperar información específica del usuario y que se comparte entre varias páginas.
Las variables de sesión consumen la memoria del servidor, así que si servidor tiene una enorme cantidad de visitantes, utilice la sesión con mucho cuidado y en lugar de usarlas, hay que tratar de usar IDs y referencias.
3- Las variables de aplicación.
Las variables de aplicación son las variables compartidas entre todos los usuarios de una aplicación web.
Las variables de aplicación se comportan como variables estáticas y son sustituyen a las variables estáticas en aplicaciones web.
Sólo los valores compartidos deben usarse en variables de aplicación, y en cuanto no estén en uso deben ser eliminados de forma explícita.
4- La memoria cache.
Caché es probablemente la característica de estado menos usada de ASP.NET.
Caché es básicamente una función de persistencia de estado, significa que a diferencia de la sesión está ligada a los recursos en vez de los usuarios, por ejemplo: páginas, controles, etc.
La caché se debe utilizar en páginas, controles y estructuras de datos usados muy frecuentemente.
La caché de datos se puede utilizar para almacenar en caché la lista de valores usados con mucha frecuencia, por ejemplo la lista de productos.
5- Las cookies.
Las cookies son valores guardados en los navegadores para un sitio web en particular o de acceso público.
El propósito de las cookies es ayudar a los sitios web para identificar a los visitantes y recuperar sus preferencias guardadas.
Las cookies también se utilizan para facilitar el auto login manteniendo el identificador de usuario en una cookie.
Debido a que las cookies se guardan en el lado del cliente, no crean problemas de rendimiento, pero pueden crear problemas de seguridad, ya que pueden ser hackeado desde el navegador
Por último recordar los siguientes puntos:
1- ViewState consume ancho de banda.
2- Las variables de sesión consumen memoria dependiendo del número de usuarios.
3- Las variables de Aplicación son compartidas por los usuarios.
4- La caché consume memoria dependiendo de los recursos usados.
5- Las cookies son las más inseguras.
Referencia: https://devshop.wordpress.com/2008/04/10/how-to-choose-from-viewstate-sessionstate-cookies-and-cache/
Las aplicaciones web son sin estado, lo que significa que una vez una página web es enviada desde servidor, nada permanece en el servidor y la próxima vez que el usuario actualiza la página, esta página será creada desde cero.
ASP.NET proporciona las siguientes soluciones para resolver este problema:
1- El ViewState.
2- Las variables de sesión.
3- Las variables de aplicación.
4- La memoria caché.
5- Las cookies.
Ahora surge la pregunta: ¿cuándo utilizar qué?
1- El ViewState.El ViewState es un campo oculto en una página ASP.NET, y contiene el estado de esos controles en una página cuya propiedad "EnableViewState" es "true".
También puede agregar explícitamente los valores en ella, como el siguiente ejemplo:
Viewstate.Add ("YearOrders", "5887");
El ViewState se debe utilizar cuando se quiere pasar un valor entre diferentes peticiones al servidor de una sola página y sus valores no son accesibles en cualquier otra página.
Debido Viewstate se renderiza con la página, consume ancho de banda, así que ten cuidado al utilizarlo en aplicaciones que corran con un bajo ancho de banda.
2- Las variables de session.
Las variables de sesión son las más utilizadas.
Cuando un usuario visita un sitio, se inicia la sesión y cuando el usuario permanece un tiempo inactivo o deja el sitio, finaliza la sesión.
Las variables de sesión se deben utilizar para guardar y recuperar información específica del usuario y que se comparte entre varias páginas.
Las variables de sesión consumen la memoria del servidor, así que si servidor tiene una enorme cantidad de visitantes, utilice la sesión con mucho cuidado y en lugar de usarlas, hay que tratar de usar IDs y referencias.
3- Las variables de aplicación.
Las variables de aplicación son las variables compartidas entre todos los usuarios de una aplicación web.
Las variables de aplicación se comportan como variables estáticas y son sustituyen a las variables estáticas en aplicaciones web.
Sólo los valores compartidos deben usarse en variables de aplicación, y en cuanto no estén en uso deben ser eliminados de forma explícita.
4- La memoria cache.
Caché es probablemente la característica de estado menos usada de ASP.NET.
Caché es básicamente una función de persistencia de estado, significa que a diferencia de la sesión está ligada a los recursos en vez de los usuarios, por ejemplo: páginas, controles, etc.
La caché se debe utilizar en páginas, controles y estructuras de datos usados muy frecuentemente.
La caché de datos se puede utilizar para almacenar en caché la lista de valores usados con mucha frecuencia, por ejemplo la lista de productos.
5- Las cookies.
Las cookies son valores guardados en los navegadores para un sitio web en particular o de acceso público.
El propósito de las cookies es ayudar a los sitios web para identificar a los visitantes y recuperar sus preferencias guardadas.
Las cookies también se utilizan para facilitar el auto login manteniendo el identificador de usuario en una cookie.
Debido a que las cookies se guardan en el lado del cliente, no crean problemas de rendimiento, pero pueden crear problemas de seguridad, ya que pueden ser hackeado desde el navegador
Por último recordar los siguientes puntos:
1- ViewState consume ancho de banda.
2- Las variables de sesión consumen memoria dependiendo del número de usuarios.
3- Las variables de Aplicación son compartidas por los usuarios.
4- La caché consume memoria dependiendo de los recursos usados.
5- Las cookies son las más inseguras.
Referencia: https://devshop.wordpress.com/2008/04/10/how-to-choose-from-viewstate-sessionstate-cookies-and-cache/
miércoles, 2 de diciembre de 2015
Agregar un CustomButton a un ASPXGridview
Para agregar un CustomButton es necesario crear la columna, esto se puede hacer abriendo el markup de la página y agregando entre las etiquetas <Columns> un código similar a el siguiente:
<dx:GridViewCommandColumn VisibleIndex="0" ButtonType="Image">
<CustomButtons>
<dx:GridViewCommandColumnCustomButton ID="btnRemove" Image-Url="Content/Images/Remove.png" Image-Width="18px">
<Image Width="18px" Url="Content/Images/Remove.png"></Image>
</dx:GridViewCommandColumnCustomButton>
</CustomButtons>
</dx:GridViewCommandColumn>
Con esto quedará definida la columna y el botón, ahora solo deberemos definir el evento en el Code Behind.
Para hacerlo creamos un método CustomButtonCallback, Visual Studio automáticamente creará los argumentos del evento y puede ser de la siguiente manera:
protected void grvHarnessItems_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
{
String value = grvHarnessItems.GetRowValues(e.VisibleIndex, "Name").ToString();
Master.DisplayMessage(value, RootMaster.MessageType.Information);
}
Para obtener el valor de cualquier renglón en la columna antes creada usamos el VisibleIndex recibido en el parámetro ASPxGridViewCustomButtonCallbackEventArgs combinado con el método GetRowValues del grid.
Mostrar imágenes en una columna del ASPXGridview dependiendo de los datos contenidos en ella.
Para mostrar una imagen dependiendo de los datos de la columna es necesario seguir los siguientes pasos:
NOTA: El valor de la columna es obtenido a través del método ASPxGridView.GetRowValuesByKeyValue.
Ejemplo:
protected void imgStatus_Init(object sender, EventArgs e)
{
ASPxImage image = (ASPxImage)sender;
GridViewDataItemTemplateContainer container = (GridViewDataItemTemplateContainer)image.NamingContainer;
String value = grvHarnessItems.GetRowValuesByKeyValue(container.KeyValue, "ObjStatString").ToString();
switch (value)
{
case "Saved":
case "Loaded":
image.ImageUrl = "~/Content/Images/Saved.png";
break;
case "Deleted":
image.ImageUrl = "~/Content/Images/Deleted.png";
break;
default:
image.ImageUrl = "~/Content/Images/Changed.png";
break;
}
}
- Agregar una columna al grid y modificar el DataItem Template.
- Poner una imagen en el DataItem Template.
- Modificar el evento Init y modificar su propiedad ImageUrl a traves del objeto "sender" basado en los valores de la columna.
NOTA: El valor de la columna es obtenido a través del método ASPxGridView.GetRowValuesByKeyValue.
Ejemplo:
protected void imgStatus_Init(object sender, EventArgs e)
{
ASPxImage image = (ASPxImage)sender;
GridViewDataItemTemplateContainer container = (GridViewDataItemTemplateContainer)image.NamingContainer;
String value = grvHarnessItems.GetRowValuesByKeyValue(container.KeyValue, "ObjStatString").ToString();
switch (value)
{
case "Saved":
case "Loaded":
image.ImageUrl = "~/Content/Images/Saved.png";
break;
case "Deleted":
image.ImageUrl = "~/Content/Images/Deleted.png";
break;
default:
image.ImageUrl = "~/Content/Images/Changed.png";
break;
}
}
martes, 17 de noviembre de 2015
Renombrar un proyecto/Solucion
Para renombrar una solución y/o proyecto .NET seguir los siguientes pasos:
- Click con el botón derecho en la solución y renombrarla.
- Click con el botón derecho en el proyecto y renombrarlo.
- Doble click en el folder properties, click en la pestaña Application y renombrarlo.
- Renombrar el directorio donde está la solución, después abrir el archivo .sln en notepad y editar los path a los archivos .csproj, vbproj, etc para que coincidan con la nueva ruta.
- Revisar los atributos Inherits en las directivas de las páginas aspx.
- Cambiar todas las referencias al viejo namespace en las clases del proyecto.
Referencia: http://forums.asp.net/t/1810215.aspx
jueves, 26 de febrero de 2015
Android KitKat no mantiene el password cuando se usa el protocolo LEAP
Android guarda la información de autenticación en el archivo /data/misc/wifi/wpa_supplicat.conf y normalmente al cambiar la contraseña de la red solo es necesario editarlo para modificarlo acorde al de nuestra red.
En Android 4.4.4 (al parecer desde la versión 4.4.2) modificar la contraseña en este archivo y tratar de conectarse a la red wifi, android restablece la contraseña anterior en el archivo y por lo tanto no podemos conectarnos a nuestra red.
Para poder modificarla con éxito es necesario seguir los siguientes pasos:
En Android 4.4.4 (al parecer desde la versión 4.4.2) modificar la contraseña en este archivo y tratar de conectarse a la red wifi, android restablece la contraseña anterior en el archivo y por lo tanto no podemos conectarnos a nuestra red.
Para poder modificarla con éxito es necesario seguir los siguientes pasos:
- Respaldar el archivo wpa_supplicant.conf.
- Modificar la contraseña.
- Borrar/Renombrar el folder /data/misc/DHCP.
- Reiniciar el teléfono.
Después de esto el teléfono se conectará de manera normal.
NOTA: Para esto es necesario tener nuestro teléfono desbloqueado (rooted).
jueves, 12 de febrero de 2015
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.
//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.
lunes, 9 de febrero de 2015
Mapear un campo de fecha nullable a un atributo de una clase
Cuando tenemos un código como el siguiente:
if (dt.Rows.Count > 0)
{
this._holderID = int.Parse(dt.Rows[0]["holder_id"].ToString());
this._item = int.Parse(dt.Rows[0]["item"].ToString());
this._holderType = dt.Rows[0]["htype_id"].ToString();
this._qty = int.Parse(dt.Rows[0]["qty"].ToString());
this._prodID =int.Parse(dt.Rows[0]["prod_id"].ToString());
this._woID =int.Parse(dt.Rows[0]["wo_id"].ToString());
this._stat = Stat.Loaded;
}
en el cual tratamos de mapear los campos prod_id y wo_id a las variables _prodID y _woID de un objeto nos provoca un error al tratar de pasar un string vacio a entero en el caso de que ese campo de la tabla este vacío, tal y como se muestra en la siguiente figura:
La solución es muy simple solo hay que comprobar primero si el campo esta vacío, en ese caso le ponemos un valor por omisión (en este caso 0), y en caso de que el campo no este vacio lo convertimos a entero y lo asignamos a la variable de nuestro objeto:
El codigo resultante quedaría asi:
if (dt.Rows.Count > 0)
{
this._holderID = int.Parse(dt.Rows[0]["holder_id"].ToString());
this._item = int.Parse(dt.Rows[0]["item"].ToString());
this._holderType = dt.Rows[0]["htype_id"].ToString();
this._qty = int.Parse(dt.Rows[0]["qty"].ToString());
this._prodID = dt.Rows[0]["prod_id"].ToString().Trim() == string.Empty ? 0 : int.Parse(dt.Rows[0]["prod_id"].ToString());
this._woID = dt.Rows[0]["wo_id"].ToString().Trim() == string.Empty ? 0 : int.Parse(dt.Rows[0]["wo_id"].ToString());
this._stat = Stat.Loaded;
}
Como podemos observar la solución es simple.
Happy Coding!!!
if (dt.Rows.Count > 0)
{
this._holderID = int.Parse(dt.Rows[0]["holder_id"].ToString());
this._item = int.Parse(dt.Rows[0]["item"].ToString());
this._holderType = dt.Rows[0]["htype_id"].ToString();
this._qty = int.Parse(dt.Rows[0]["qty"].ToString());
this._prodID =int.Parse(dt.Rows[0]["prod_id"].ToString());
this._woID =int.Parse(dt.Rows[0]["wo_id"].ToString());
this._stat = Stat.Loaded;
}
en el cual tratamos de mapear los campos prod_id y wo_id a las variables _prodID y _woID de un objeto nos provoca un error al tratar de pasar un string vacio a entero en el caso de que ese campo de la tabla este vacío, tal y como se muestra en la siguiente figura:
La solución es muy simple solo hay que comprobar primero si el campo esta vacío, en ese caso le ponemos un valor por omisión (en este caso 0), y en caso de que el campo no este vacio lo convertimos a entero y lo asignamos a la variable de nuestro objeto:
El codigo resultante quedaría asi:
if (dt.Rows.Count > 0)
{
this._holderID = int.Parse(dt.Rows[0]["holder_id"].ToString());
this._item = int.Parse(dt.Rows[0]["item"].ToString());
this._holderType = dt.Rows[0]["htype_id"].ToString();
this._qty = int.Parse(dt.Rows[0]["qty"].ToString());
this._prodID = dt.Rows[0]["prod_id"].ToString().Trim() == string.Empty ? 0 : int.Parse(dt.Rows[0]["prod_id"].ToString());
this._woID = dt.Rows[0]["wo_id"].ToString().Trim() == string.Empty ? 0 : int.Parse(dt.Rows[0]["wo_id"].ToString());
this._stat = Stat.Loaded;
}
Como podemos observar la solución es simple.
Happy Coding!!!
viernes, 23 de enero de 2015
Agregar una Columna a un ASPxGridview (Devexpress)
Si allguna vez deseamos agregar una columna a un Grid de Devexpress en modo de ejecución se hace de la siguiente manera:
GridViewDataTextColumn col = new GridViewDataTextColumn();
col.Caption = "New";
col.FieldName = "New";
col.UnboundType = DevExpress.Data.UnboundColumnType.String;
col.VisibleIndex = ASPxGridView1.VisibleColumns.Count;
ASPxGridView1.Columns.Add(col);
GridViewDataTextColumn col = new GridViewDataTextColumn();
col.Caption = "New";
col.FieldName = "New";
col.UnboundType = DevExpress.Data.UnboundColumnType.String;
col.VisibleIndex = ASPxGridView1.VisibleColumns.Count;
ASPxGridView1.Columns.Add(col);
jueves, 22 de enero de 2015
Agregar una columna a una DataSet
Ejemplo:
DataSet dsBom = new DataSet();
CreateDataSet cdsBom = new CreateDataSet();
DataColumn dcEqty = new DataColumn("Eqty");
dsBom.Tables[0].Columns.Add(dcEqty);
dsBom.Tables[0].Rows[0]["Eqty"] = 1565;
DataSet dsBom = new DataSet();
CreateDataSet cdsBom = new CreateDataSet();
DataColumn dcEqty = new DataColumn("Eqty");
dsBom.Tables[0].Columns.Add(dcEqty);
dsBom.Tables[0].Rows[0]["Eqty"] = 1565;
Como crear la estructura de una DataTable
Agunas veces necesitamos crear un datatable que no necesariamente venga de
una base de datos.
Esto se hace de la siguiente manera:
//Creamos el objeto DataTable
DataTable tabla = new DataTable();
//Creamos el objeto ColumnaDataColumn columna;
//Creamos el objeto RenglonDataRow renglon;
//Creamos las columnas necesarias y las agregamos a la tablacolumna = new DataColumn();columna.ColumnName = "Campo1";columna.DataType = System.Type.GetType("System.Int32");tabla.Columns.Add(columna);columna = new DataColumn();columna.ColumnName = "Campo2";columna.DataType = System.Type.GetType("System.String");tabla.Columns.Add(columna);
Con esto ya tenemos un DataTable de nombre tabla con dos campos: El campo "Campo1" de tipo Int32 y el "Campo2" de tipo String.
A continuacion les pongo las propiedades que pueden usar en el objeto Columna:
Esto se hace de la siguiente manera:
//Creamos el objeto DataTable
DataTable tabla = new DataTable();
//Creamos el objeto ColumnaDataColumn columna;
//Creamos el objeto RenglonDataRow renglon;
//Creamos las columnas necesarias y las agregamos a la tablacolumna = new DataColumn();columna.ColumnName = "Campo1";columna.DataType = System.Type.GetType("System.Int32");tabla.Columns.Add(columna);columna = new DataColumn();columna.ColumnName = "Campo2";columna.DataType = System.Type.GetType("System.String");tabla.Columns.Add(columna);
Con esto ya tenemos un DataTable de nombre tabla con dos campos: El campo "Campo1" de tipo Int32 y el "Campo2" de tipo String.
A continuacion les pongo las propiedades que pueden usar en el objeto Columna:
- AllowDBNull
- Acepta un valor booleano que especifica si acepta valore nulos.
- AutoIncrement
- Acepta un valor booleano qe especifica si el valor de la columna se incrementara automaticamente o no.
- AutoIncrementSeed
- El valor con el que comenzara una columna que se incrementa automaticamente.
- AutoIncrementStep
- El valor en que se incrementara una columna que se incrementa automaticamente.
- ColumnName
- Un string con el nombre de la columna.
- DataType
- Un valor de los especificados en el tipo SystemType que especifica el tipo de valor que aceptara la columna.
- DefaultValue
- El valor que la columna tomara por defecto en caso de que no se especifique alguno.
- MaxLength
- Especifica la longitud maxima de texto que aceptara un columna de tipo string.
- Unique
- Acepta un valor booleano para especificar si la columna debe mantener un valor unico en cada registro de la columna.
Agregar un campo con autoincremento a un DataGridView
Cuando necesitemos agregar una columna a
nuestro DataGridView que solo nos enumere los renglones que despliega solo es
necesario agregar el siguiente codigo al markup donde esta definido nuestro
DataGridView:
<Columns>
<asp:TemplateField HeaderText="#">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
con esto se agregara una columna con el encabezado # y que contendra el numero de renglon de cada DataRow.
<Columns>
<asp:TemplateField HeaderText="#">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
con esto se agregara una columna con el encabezado # y que contendra el numero de renglon de cada DataRow.
Agregar una columna autonumerica a un DataTable
Para agregar una columna autonumerica a un DataTable es necesario
crear un objeto DataTable y un objeto Column que tenga la
propiedad AutoIncrement en true y luego mezclarlo con el
DataTable que deseamos como en el siguiente ejemplo:
DataTable myDt = new DataTable();
DataColumn dc = new DataColumn();
dc.ColumnName = "#";
dc.DataType = typeof(int);
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dc.AutoIncrementStep = 1;
BoardCode bc = new BoardCode();
DataTable dt = bc.GetHoldersByBcID(int.Parse(this.TextBox1.Text));
myDt.Columns.Add(dc);
myDt.Merge(dt);
this.GridView1.DataSource = myDt;
this.GridView1.DataBind();
Asi, cuando la despleguemos en un DataGridView se mostrara en la primera columna con un contador de renglones.
DataTable myDt = new DataTable();
DataColumn dc = new DataColumn();
dc.ColumnName = "#";
dc.DataType = typeof(int);
dc.AutoIncrement = true;
dc.AutoIncrementSeed = 1;
dc.AutoIncrementStep = 1;
BoardCode bc = new BoardCode();
DataTable dt = bc.GetHoldersByBcID(int.Parse(this.TextBox1.Text));
myDt.Columns.Add(dc);
myDt.Merge(dt);
this.GridView1.DataSource = myDt;
this.GridView1.DataBind();
Asi, cuando la despleguemos en un DataGridView se mostrara en la primera columna con un contador de renglones.
Suscribirse a:
Comentarios (Atom)
Mover mensajes seleccionados a un personal folder en Oulook 2016
Este es un ejemplo de como mover los mensajes seleccionados a un personal folder (pst) en Outlook 2016 usando VBA. Sub MoveInbox() Mov...
-
A continuación les muestro un ejemplo de como eliminar los registros repetidos de una DataTable . //DataTable con los reqistros repetidos...
-
Problemas con Aplicaciones Web Las aplicaciones web son sin estado, lo que significa que una vez una página web es enviada desde servidor, ...
-
Primero hay que crear el Panel como en el siguiente ejemplo: <dx:ASPxLoadingPanel ID="loadingPanel" ClientInstanceName=...
