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.

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

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

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;

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:

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

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.

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