public delegate void EventoContaIDs(Int32 pValor, ProgressBar pPrg);
public delegate void EventoTotalIDs(Int32 pValor, ProgressBar pPrg);
public event EventoContaIDs ProgressoIDs;
public event EventoTotalIDs TotalIDs;
#region Constantes
/// <summary>Formato de hora sem segundo: "HH:mm"</summary>
public const String _FormatoHoraSS = "HH:mm";
/// <summary>Formato de hora com segundo: "HH:mm:ss"</summary>
public const String _FormatoHoraCS = "HH:mm:ss";
/// <summary>Formato de data e hora: "dd/MM/yyyy HH:mm:ss"</summary>
public const String _FormatoDataHora = "dd/MM/yyyy HH:mm:ss";
/// <summary>Formato de data: "dd/MM/yyyy"</summary>
public const String _FormatoData = "dd/MM/yyyy";
/// <summary>Formato de moeda: "###,###,###,###,##0.00"</summary>
public const String _FormatoMoeda = "###,###,###,###,##0.00";
/// <summary>Formato de número: "###,###,###,###,##0"</summary>
public const String _FormatoNumero = "###,###,###,###,##0";
/// <summary>Formato de Moeda para uso em grids: "{0:N}"</summary>
public const String _FormatoMoedaGrid = "{0:N}";
/// <summary>Formato de Data para uso em grids: "{0:dd/MM/yyyy}"</summary>
public const String _FormatoDataGrid = "{0:dd/MM/yyyy}";
#endregion
#region transformar linhas em colunas (como o oracle usado atual é o 9 e o comando PIVOT só tem na versão 11 e também os sub-selects estavam muito lentos...)
public void Transformar_Linhas_Em_Colunas(DataTable iDtPrinc, String pID, DataTable iDtSec, String pColuna)
{
Transformar_Linhas_Em_Colunas(iDtPrinc, pID, iDtSec, pColuna, null, null);
}
public void Transformar_Linhas_Em_Colunas(DataTable iDtPrinc, String pID, DataTable iDtSec, String pColuna, ProgressBar pPrg1, ProgressBar pPrg2)
{
Transformar_Linhas_Em_Colunas(iDtPrinc, pID, iDtSec, pColuna, pPrg1, pPrg2, string.Empty);
}
public void Transformar_Linhas_Em_Colunas(DataTable iDtPrinc, String pID, DataTable iDtSec, String pColuna, ProgressBar pPrg1, ProgressBar pPrg2, String pAdicionarNomeTabelaNaColuna)
{
if (TotalIDs != null && pPrg1 != null)
pPrg1.Maximum = iDtPrinc.Rows.Count;
if (String.IsNullOrEmpty(pColuna))
Transformar_Linhas_Em_Colunas(iDtPrinc, pID, iDtSec, pPrg1, pPrg2, pAdicionarNomeTabelaNaColuna, false);
else
{
//_DvGroup = null;
CriarColunas(pColuna, iDtSec, pID, iDtPrinc, pAdicionarNomeTabelaNaColuna);
//if (TotalIDs != null && pPrg1 != null)
// pPrg1.Maximum = iDtPrinc.Rows.Count;
Int32 iCont = 0;
foreach (DataRow iDrPrinc in iDtPrinc.Rows)
{
if (!String.IsNullOrEmpty(iDrPrinc[pID].ToString()))
{
DataView iDvDados = new DataView(iDtSec, pID + "='" + iDrPrinc[pID].ToString() + "'", pColuna, DataViewRowState.CurrentRows);
if (iDvDados.Count > 0)
{
if (ProgressoIDs != null && pPrg2 != null)
pPrg2.Maximum = iDvDados.Count;
String iMesmo = "";
int iAux = 0;
Int32 iContAux = 0;
foreach (DataRowView iDrSec in iDvDados)
{
if (!iMesmo.Equals(iDrSec[pColuna].ToString()))
iAux = 0;
iAux++;
foreach (DataColumn iDc in iDvDados.Table.Columns)
{
if (!iDc.ColumnName.Trim().Equals(pID, StringComparison.OrdinalIgnoreCase)
&& !iDc.ColumnName.Trim().Equals(pColuna, StringComparison.OrdinalIgnoreCase))
{
iDrPrinc[(String.IsNullOrEmpty(pAdicionarNomeTabelaNaColuna) ? "" : pAdicionarNomeTabelaNaColuna)
+ iDrSec[pColuna] + (iAux == 1 ? "" : "_" + iAux) + "_" + iDc.ColumnName] = iDrSec[iDc.ColumnName];
}
}
iMesmo = iDrSec[pColuna].ToString();
if (ProgressoIDs != null && pPrg2 != null)
ProgressoIDs(++iContAux, pPrg2);
}
//String iMesmo = "";
//Int32 iContAux = 1;
//foreach (DataRowView iDrSec in iDvDados)
//{
// if (!iMesmo.Equals(iDrSec[pColuna].ToString()))
// iContAux = 1;
// foreach (DataColumn iDc in iDvDados.Table.Columns)
// {
// if (!iDc.ColumnName.Trim().Equals(pID, StringComparison.OrdinalIgnoreCase)
// && !iDc.ColumnName.Trim().Equals(pColuna, StringComparison.OrdinalIgnoreCase))
// {
// Boolean iExcecao = false;
// if (_DvGroup != null)
// {
// _DvGroup.RowFilter = pColuna + "='" + iDrSec[pColuna] + "'";
// if (_DvGroup.Count > 0)
// iExcecao = true;
// }
// iDrPrinc[iDrSec[pColuna] + (iExcecao ? "_" + iContAux : "") + "_" + iDc.ColumnName] = iDrSec[iDc.ColumnName];
// }
// }
// if (!Validacao.IsEmpty(pColuna))
// iMesmo = iDrSec[pColuna].ToString();
// iContAux++;
//}
}
}
if (TotalIDs != null && pPrg1 != null)
TotalIDs(++iCont, pPrg1);
}
}
}
//public static T Tipo<T>(String pID, DataTable pDtPrinc)
//{
// return ((pDtPrinc.Columns[pID].DataType == typeof(String)) ? typeof(String) : typeof(Int32));
//}
public static List<T> CreateList<T>(params T[] elements)
{
return new List<T>(elements);
}
private void CriarColunas(String pColuna, DataTable _DtSec, String pID, DataTable pDtPrinc, String pAdicionarNomeTabelaNaColuna)
{
//Dictionary<int, string> mydict = new Dictionary<string, int>();
var queryDtAux = (from table in _DtSec.AsEnumerable()
select new
{
aColuna = table.Field<String>(pColuna),
aID = table.Field<Int32>(pID) //2014/09/19 -> aID = table.Field<Int32>(pID) alterado de Int32 para String //voltado para Int32 em 24/09/14, pois qdo. tem uma coluna tipo Int32 gera o erro
}
);
var queryDt = queryDtAux.ToList();
var queryGrp = from t in queryDt
group t by new { t.aColuna, t.aID } into g
select new
{
aCol = g.Key.aColuna,
aIde = g.Key.aID,
Total = g.Count()
};
//pega o nº máximo de vezes que a coluna (tipo) vai aparecer por Identificador
var queryMax = queryGrp
.GroupBy(i => i.aCol)
.Select(i => new { NovaColuna = i.Key, MyCount = i.Max(k => k.Total) })
.OrderBy(i => i.NovaColuna); //order by adicionado em 2014/fev/26
foreach (var x in queryMax)
{
for (int i = 0; i < x.MyCount; i++)
{
foreach (DataColumn iDc in _DtSec.Columns)
{
if (!iDc.ColumnName.Trim().Equals(pID, StringComparison.OrdinalIgnoreCase)
&& !iDc.ColumnName.Trim().Equals(pColuna, StringComparison.OrdinalIgnoreCase))
{
String iColumnName = (String.IsNullOrEmpty(pAdicionarNomeTabelaNaColuna) ? "" : pAdicionarNomeTabelaNaColuna)
+ x.NovaColuna + (i == 0 ? "" : "_" + (i + 1).ToString()) + "_" + iDc.ColumnName;
pDtPrinc.Columns.Add(iColumnName, iDc.DataType);
String iFormato = string.Empty;
switch (_DtSec.TableName.Trim())
{
#region Valores
case "Valores":
switch (iDc.ColumnName)
{
//case "VALOR_ATUALIZADO":
//case "VALOR_CORRECAO":
//case "VALOR_JUROS":
// iFormato = Geral._FormatoMoeda + "0000";
// break;
case "DATA_ATUALIZACAO":
case "QDO_ALTEROU":
case "QDO_INCLUIU":
iFormato = _FormatoDataHora;
break;
}
break;
#endregion
#region Garantias
case "Garantias":
switch (iDc.ColumnName)
{
case "QDO_ALTEROU":
case "QDO_INCLUIU":
iFormato = _FormatoDataHora;
break;
}
break;
#endregion
#region Dados Clientes
case "Dados cliente":
switch (iDc.ColumnName)
{
case "QUANDO":
iFormato = _FormatoDataHora;
break;
}
break;
#endregion
}
if (!String.IsNullOrEmpty(iFormato))
pDtPrinc.Columns[iColumnName].ExtendedProperties.Add("Formato", iFormato);
}
}
}
}
}
//DataView _DvGroup;
//private void CriarColunasOLD(String pColuna, DataTable _DtSec, String pID, DataTable pDtPrinc)
//{
// //faz o agrupamento pelo IDE e pelo campo a ser transformado em coluna e desse agrupamento verifica quais registros retornam mais de 1 ocorrência
// var groupQuery = from table in _DtSec.AsEnumerable()
// group table by new { column1 = table[pID], column2 = table[pColuna] } into newdr
// where newdr.Count() > 1
// select newdr;
// //copia somente a estrutura do datatable
// DataTable iDtGroup = _DtSec.Clone();
// //copia as linhas que foram encontradas com mais de 1 ocorrência, essas linhas irão gerar a coluna com underline e nº na frente (_n) pois o datatable não aceita colunas com o mesmo nome
// foreach (var x in groupQuery)
// x.CopyToDataTable(iDtGroup, LoadOption.OverwriteChanges);
// //pega todos os campos que irão virar colunas
// DataTable iDtDistinct = _DtSec.DefaultView.ToTable(true, pColuna);
// //remove os campos que tem mais de 1 ocorrência
// var ccList = iDtDistinct.AsEnumerable();
// var bannedCCList = iDtGroup.AsEnumerable();
// var exceptBanned = from c in ccList
// join b in bannedCCList
// on c.Field<String>(pColuna) equals b.Field<String>(pColuna) into j
// from x in j.DefaultIfEmpty()
// where x == null
// select c;
// //insere como colunas todos os campos, exceto os que tem mais de 1 ocorrência
// foreach (DataRow iDr in exceptBanned)
// {
// foreach (DataColumn iDc in _DtSec.Columns)
// {
// if (!iDc.ColumnName.Trim().Equals(pID, StringComparison.OrdinalIgnoreCase)
// && !iDc.ColumnName.Trim().Equals(pColuna, StringComparison.OrdinalIgnoreCase))
// {
// //if (iDc.ColumnName.Trim().ToUpper().Equals("AND_DTA"))
// //{
// //}
// pDtPrinc.Columns.Add(iDr[pColuna].ToString() + "_" + iDc.ColumnName, iDc.DataType);
// }
// }
// }
// _DvGroup = new DataView(iDtGroup, "", pColuna, DataViewRowState.CurrentRows);
// //para os campos com mais de 1 ocorrência insere colocando numeração na frente para não repetir (_n)
// String iMesmo = "";
// Int32 iContAux = 1;
// foreach (DataRowView iDr in _DvGroup)
// {
// if (!iMesmo.Equals(iDr[pColuna].ToString()))
// iContAux = 1;
// foreach (DataColumn iDc in _DtSec.Columns)
// {
// if (!iDc.ColumnName.Trim().Equals(pID, StringComparison.OrdinalIgnoreCase)
// && !iDc.ColumnName.Trim().Equals(pColuna, StringComparison.OrdinalIgnoreCase))
// {
// pDtPrinc.Columns.Add(iDr[pColuna].ToString() + "_" + iContAux.ToString() + "_" + iDc.ColumnName, iDc.DataType);
// }
// }
// iMesmo = iDr[pColuna].ToString();
// iContAux++;
// }
//}
public void Transformar_Linhas_Em_Colunas(DataTable iDtPrinc, String pID, DataTable iDtSec)
{
Transformar_Linhas_Em_Colunas(iDtPrinc, pID, iDtSec, null, null, string.Empty, false);
}
public void Transformar_Linhas_Em_Colunas(DataTable iDtPrinc, String pID, DataTable iDtSec, ProgressBar pPrg1, ProgressBar pPrg2, String pAdicionarNomeTabelaNaColuna,
Boolean pValidarValorAnterior)
{
Transformar_Linhas_Em_Colunas(iDtPrinc, pID, iDtSec, pPrg1, pPrg2, pAdicionarNomeTabelaNaColuna, pValidarValorAnterior, String.Empty);
}
//public void Transformar_Linhas_Em_Colunas(DataTable iDtPrinc, String pID, DataTable iDtSec, ProgressBar pPrg1, ProgressBar pPrg2, String pAdicionarNomeTabelaNaColuna,
// Boolean pValidarValorAnterior, String pColunaVerNulos)
//{
// Transformar_Linhas_Em_Colunas(iDtPrinc, pID, iDtSec, pPrg1, pPrg2, pAdicionarNomeTabelaNaColuna, pValidarValorAnterior, pColunaVerNulos, String.Empty);
//}
public void Transformar_Linhas_Em_Colunas(DataTable iDtPrinc, String pID, DataTable iDtSec, ProgressBar pPrg1, ProgressBar pPrg2, String pAdicionarNomeTabelaNaColuna,
Boolean pValidarValorAnterior, String pColunaVerNulos) //, String pColunaVerNulos2
{
int iTotalCol = 0;
String iFiltro = "";
if (iDtSec.Columns.Contains(pColunaVerNulos))
{
String iNaoNulos = pColunaVerNulos + " is not null";
//if (iDtSec.Columns.Contains(pColunaVerNulos2))
// iNaoNulos += " and " + pColunaVerNulos2 + " is not null";
DataRow[] iDrFilt = iDtSec.Select(iNaoNulos);
foreach (DataRow iDrF in iDrFilt)
{
iFiltro += "," + iDrF[pID].ToString();
}
if (!String.IsNullOrEmpty(iFiltro))
{
iFiltro = pID + " in (" + iFiltro.Substring(1) + ")";
iDtPrinc.DefaultView.RowFilter = iFiltro;
}
}
Int32 iCont = 0;
foreach (DataRowView iDrPrinc in iDtPrinc.DefaultView)
{
DataView iDvDados = new DataView(iDtSec, pID + "='" + iDrPrinc[pID].ToString() + "'", "", DataViewRowState.CurrentRows);
if (iDvDados.Count > 0)
{
if (iDvDados.Count > iTotalCol)
{
//iTotalCol = iDtSec.Rows.Count;
//for (int i = 1; i <= iTotalCol; i++)
for (int i = (iTotalCol + 1); i <= iDvDados.Count; i++)
{
foreach (DataColumn iDc in iDvDados.Table.Columns)
{
if (!iDtPrinc.Columns.Contains(pAdicionarNomeTabelaNaColuna + iDc.ColumnName + (i == 1 ? "" : "_" + i))
&& !iDc.ColumnName.Trim().Equals(pID.Trim(), StringComparison.OrdinalIgnoreCase))
//if (!iDc.ColumnName.Trim().Equals(pID.Trim(), StringComparison.OrdinalIgnoreCase))
iDtPrinc.Columns.Add(pAdicionarNomeTabelaNaColuna + iDc.ColumnName + (i == 1 ? "" : "_" + i), iDc.DataType);
}
}
iTotalCol = iDvDados.Count;
}
//copia dos dados
Int32 iContAux = 0;
if (ProgressoIDs != null && pPrg2 != null)
pPrg2.Maximum = iDvDados.Count;
int iAux = 1;
foreach (DataRowView iDrSec in iDvDados)
{
foreach (DataColumn iDc in iDvDados.Table.Columns)
{
if (!iDc.ColumnName.Trim().Equals(pID.Trim(), StringComparison.OrdinalIgnoreCase))
{
if (!pValidarValorAnterior ||
(pValidarValorAnterior && String.IsNullOrEmpty(iDrPrinc[pAdicionarNomeTabelaNaColuna + iDc.ColumnName + (iAux == 1 ? "" : "_" + iAux)].ToString())))
iDrPrinc[pAdicionarNomeTabelaNaColuna + iDc.ColumnName + (iAux == 1 ? "" : "_" + iAux)] = iDrSec[iDc.ColumnName];
}
}
iAux++;
if (ProgressoIDs != null && pPrg2 != null)
ProgressoIDs(++iContAux, pPrg2);
}
}
if (TotalIDs != null && pPrg1 != null)
TotalIDs(++iCont, pPrg1);
}
}
public static string dataTableToHTML(DataTable dt)
{
if (dt.Rows.Count == 0)
return "";
StringBuilder builder = new StringBuilder();
builder.Append("<html>");
builder.Append("<head>");
builder.Append("<title>");
builder.Append("Page-");
builder.Append(Guid.NewGuid().ToString());
builder.Append("</title>");
builder.Append("</head>");
builder.Append("<body>");
builder.Append("<table border='1px' cellpadding='5' cellspacing='0' ");
builder.Append("style='border: solid 1px Silver; font-size: x-small;'>");
builder.Append("<tr align='left' valign='top'>");
foreach (DataColumn c in dt.Columns)
{
builder.Append("<td align='left' valign='top'><b>");
builder.Append(c.ColumnName);
builder.Append("</b></td>");
}
builder.Append("</tr>");
foreach (DataRow r in dt.Rows)
{
builder.Append("<tr align='left' valign='top'>");
foreach (DataColumn c in dt.Columns)
{
builder.Append("<td align='left' valign='top'>");
builder.Append(r[c.ColumnName]);
builder.Append("</td>");
}
builder.Append("</tr>");
}
builder.Append("</table>");
builder.Append("</body>");
builder.Append("</html>");
return builder.ToString();
}
//private static void CarregarFilhos(DataTable iDtPrinc, DataRow iDrPrinc, ref Int32 iTotalCol, String pID, DataView iDvSec)
//{
// if (iDvSec.Count > 0)
// {
// if (iDvSec.Count > iTotalCol)
// {
// //iTotalCol = iDtSec.Rows.Count;
// //for (int i = 1; i <= iTotalCol; i++)
// for (int i = (iTotalCol + 1); i <= iDvSec.Count; i++)
// {
// foreach (DataColumn iDc in iDvSec.Table.Columns)
// {
// //if (!_DtGeral.Tables[0].Columns.Contains(iDc.ColumnName + "_" + i) && !iDc.ColumnName.Trim().Equals(txtID.Text.Trim(), StringComparison.OrdinalIgnoreCase))
// if (!iDc.ColumnName.Trim().Equals(pID.Trim(), StringComparison.OrdinalIgnoreCase))
// iDtPrinc.Columns.Add(iDc.ColumnName + "_" + i, iDc.DataType);
// }
// }
// iTotalCol = iDvSec.Count;
// }
// //copia dos dados
// int iAux = 1;
// foreach (DataRowView iDrSec in iDvSec)
// {
// foreach (DataColumn iDc in iDvSec.Table.Columns)
// {
// if (!iDc.ColumnName.Trim().Equals(pID.Trim(), StringComparison.OrdinalIgnoreCase))
// iDrPrinc[iDc.ColumnName + "_" + iAux] = iDrSec[iDc.ColumnName];
// }
// iAux++;
// }
// }
//}
#endregion
Nenhum comentário:
Postar um comentário