Select DISTINCT From Datatable Using C# Parte II

Existe siempre la necesidad de realizar un Select Distinct a un DataTable cuando las filas están repetidas. En esta ocasión les comparto una nueva solución en .Net C# que permite devolver los resultados con mas de una columna. 


using System.Data;

public DataTable SelectRowDisctinct(DataTable dtData, string sColumnName)
{
 try
 {                
  DataTable distintos = dtData.DefaultView.ToTable(true, sColumnName);
  DataTable dtNew = new DataTable();
  foreach (DataColumn dcName in dtData.Columns)
  {
   dtNew.Columns.Add(new DataColumn(dcName.Caption,dcName.DataType));
  }
   
  foreach (DataRow drRow in distintos.Rows)
  {
   dtNew.ImportRow(dtData.Select(sColumnName + " = '" + drRow[0] + "'")[0]);
  }
  return dtNew;
 }
 catch (Exception ex)
 {
  throw (ex);
 }
}

Espero les pueda servir, de un Select DISTINCT From Datatable Usando C#
Share:

Como Eliminar un Row de un Gridview en C#

El siguiente formato HTML consiste en un GridView de C# con dos columnas BoundField y una columna CommandField así:

<asp:GridView ID="GridView1" CssClass = "Grid" runat="server" OnRowDeleting="OnRowDeleting" AutoGenerateColumns ="false" OnRowDataBound = "OnRowDataBound">
    <Columns>
        <asp:BoundField DataField="Item" HeaderText="Item" />
        <asp:BoundField DataField="Price" HeaderText="Price" />
        <asp:CommandField ShowDeleteButton="True" ButtonType="Button" />
    </Columns>
</asp:GridView>

Dentro del evento de carga de la página , el ASP.Net GridView se rellena usando un DataTable y DataTable se guarda en la variable ViewState.

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Item"), new DataColumn("Price") });
        dt.Rows.Add("Shirt", 450);
        dt.Rows.Add("Jeans", 3200);
        dt.Rows.Add("Trousers", 1900);
        dt.Rows.Add("Tie", 185);
        dt.Rows.Add("Cap", 100);
        dt.Rows.Add("Hat", 120);
        dt.Rows.Add("Scarf", 290);
        dt.Rows.Add("Belt", 150);
        ViewState["dt"] = dt;
        BindGrid();
    }
}
protected void BindGrid()
{
    GridView1.DataSource = ViewState["dt"] as DataTable;
    GridView1.DataBind();
}



Aplicando el cuadro de confirmación JavaScript para GridView CommandField Borrar Button

Dentro del controlador de eventos OnRowDataBound, un bucle se ejecuta en los controles Button del GridView. Si el CommandName del botón es Eliminar continua mostrando el cuadro de confirmación se asignando su atributo OnClic.

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        string item = e.Row.Cells[0].Text;
        foreach (Button button in e.Row.Cells[2].Controls.OfType<Button>())
        {
            if (button.CommandName == "Delete")
            {
                button.Attributes["onclick"] = "if(!confirm('Do you want to delete " + item + "?')){ return false; };";
            }
        }
    }
}
Elimine el ASP.Net GridView Fila usando CommandField y eventos OnRowDeleting

Cuando se hace clic en el botón Eliminar, se ejecuta el controlador de eventos OnRowDeleting. Dentro del controlador de eventos OnRowDeleting, el Índice del GridView fila se determina y se y se utiliza para eliminar la Línea de DataTable.

Por último, el DataTable se guarda de nuevo a la ViewState y el GridView está nuevamente poblada. A continuación puedes visualizar como se Elimina un Row de un GridView de forma fácil.


protected void OnRowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int index = Convert.ToInt32(e.RowIndex);
    DataTable dt = ViewState["dt"] as DataTable;
    dt.Rows[index].Delete();
    ViewState["dt"] = dt;
    BindGrid();
}
Share:

Exportar DataTable a CSV en C#

Anexo código que nos permite exportar un DataTable a un archivo plano con extensión CSV desde Visual studio C#

Para este ejemplo creamos un DataTable:

private DataTable TablaEnvioSms()
{
   DataTable dtSms = new DataTable();

   dtSms.Columns.Add("Fila", typeof(string));
   dtSms.Columns.Add("Nombres", typeof(string));
   dtSms.Columns.Add("Apellidos", typeof(string));
   dtSms.Columns.Add("Direccion", typeof(string));
   dtSms.Columns.Add("Telefono", typeof(string));
   return dtSms;
}

Este es el evento Click del boton (btnExportar) en la pagina aspx

protected void btnExportar_Click(object sender, EventArgs e)
    {
        DataTable dtSms = new DataTable();

        //Asignamos estructura del DataTable
        dtSms = TablaEnvioSms();
        DataRow newRow;

        //primera fila
        newRow = dtSms.NewRow();
        newRow["Fila"] = "1";
        newRow["Nombres"] = "Pedro Luis";
        newRow["Apellidos"] = "Ramirez Perez";
        newRow["Direccion"] = "Calle 1 No. 2 2";
        newRow["Telefono"] = "5555";
        dtSms.Rows.Add(newRow);

        //segunda fila
        newRow = dtSms.NewRow();
        newRow["Fila"] = "2";
        newRow["Nombres"] = "Maria tereza";
        newRow["Apellidos"] = "Ramirez Perez";
        newRow["Direccion"] = "Calle 1 No. 2 2";
        newRow["Telefono"] = "44444";
        dtSms.Rows.Add(newRow);
       

        //Realizamos el Llamado al metodo que exporta la estructura del DataTable.
        //Ademas recibe el nombre del archivo CSV y la ruta donde se almacenara.
        DataTableCSVFile(dtSms, "ExportarDatos.csv", "c://");

    }


Método que Exporta los datos y muestra el archivo para abrirlo.

public void DataTableCSVFile(DataTable dt,string sfilename, string strFilePath)
    {     
        StreamWriter sw = new StreamWriter(strFilePath + sfilename, false);
        int iColCount = dt.Columns.Count;

        // Escribiendo las Columnas del DataTable.
        for (int i = 0; i < iColCount; i++)
        {
            sw.Write(dt.Columns[i]);
            if (i < iColCount - 1)
            {
                sw.Write(",");
            }
        }

        sw.Write(sw.NewLine);

        // Escribiendo todas las Filas del DataTable.
        foreach (DataRow dr in dt.Rows)
        {
            for (int i = 0; i < iColCount; i++)
            {
                if (!Convert.IsDBNull(dr[i]))
                {
                    sw.Write(dr[i].ToString());
                }

                if (i < iColCount - 1)
                {
                    sw.Write(",");
                }
            }
            sw.Write(sw.NewLine);
        }
        sw.Close();

        Response.Clear();
        Response.ContentType = "application/csv";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + sfilename);
        Response.WriteFile(strFilePath + sfilename);
        Response.Flush();
        Response.End();
    }

Exportar un Dataset a Excel desde c# es una funcionalidad muy interesante, los invito a consultarla.

Si tienen alguna duda o ampliar la información me cuentan, hasta pronto.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""


Share: