sabato 24 agosto 2013

Aggiornamento app Quiz 1.9.5

Aggiornamento per Quiz nell'android market con un inserimento di 210 nuovi quiz italiani in varie categorie (da ora 150 domande per ogni categoria), aggiunte e migliorate alcune risposte, risolto bug nelle soluzioni (le risposte nella categoria informatica venivano duplicate), migliorato l'aiuto per la risposta esatta, aumentato il punteggio massimo a 1.000.000.000!

martedì 20 agosto 2013

Ordinamento ascendente e decrescente su griglia in c#

Un pochino laborioso, ma con questo esempio si può creare un "sorting" su un qualsiasi campo di una GridView con c#.
Selezionando con il mouse la freccia "up" o "down" vicino al campo da ordinare, tutti i campi della griglia si ordinano automaticamente.
La griglia è il componente classico GridView utilizzato in una pagina aspx con Visual Studio 2010 framework 4.0 (ma si trova anche con il 3.5).
Di seguito il codice della pagina aspx e il codice da integrare nel file .cs
(Da non dimenticare di reperire le immagini delle frecce "up" e "down").

<%@ Page Title="Home page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
OnPageIndexChanging="GridView1_PageIndexChanging" OnSorting="GridView1_Sorting" 
OnRowCreated="GridView1_RowCreated"
AllowSorting="True" DataKeyNames="id" AllowPaging="True" PageSize="15" 
PageIndex="0" PagerSettings-Mode="NumericFirstLast"
PagerSettings-FirstPageText="Prima" PagerSettings-LastPageText="Ultima" 
EmptyDataText="No data available."
>
<Columns>
<asp:TemplateField HeaderText="id" ItemStyle-Width="50" SortExpression="id">
<ItemStyle HorizontalAlign="left"/>
<ItemTemplate>
<%# Eval("id")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="description" ItemStyle-Width="150" SortExpression="description">
<ItemStyle HorizontalAlign="left"/>
<ItemTemplate>
<%# Eval("description")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Content>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
CaricaGridView("id", SortDirection.Ascending);
}

protected DataTable dataTable()
{
DataTable dt = new DataTable();
dt = new DataTable("dt");
dt.Columns.Add(new DataColumn("id", typeof(string)));
dt.Columns.Add(new DataColumn("description", typeof(string)));
DataRow dataRow = dt.NewRow();
dataRow = dt.NewRow();
dataRow["id"] = "1";
dataRow["description"] = "ALFAROMEO";
dt.Rows.Add(dataRow);
dataRow = dt.NewRow();
dataRow["id"] = "2";
dataRow["description"] = "FORD";
dt.Rows.Add(dataRow);
dataRow = dt.NewRow();
dataRow["id"] = "3";
dataRow["description"] = "VOLVO";
dt.Rows.Add(dataRow);

return dt;
}


protected void CaricaGridView(string sortString, SortDirection sortDirection)
{
DataView dataView = null;
try
{
dataView = new DataView(dataTable());
if (sortDirection.Equals(SortDirection.Ascending))
dataView.Sort = sortString + " " + "ASC";
else
dataView.Sort = sortString + " " + "DESC";

GridView1.DataSource = dataView;
GridView1.DataBind();
}
catch (Exception ex)
{

}
finally
{
if (dataView != null)
dataView.Dispose();
}
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

GridView1.PageIndex = e.NewPageIndex;

DataView dataView = null;
try
{
dataView = new DataView(dataTable());
String SortExpDirection = Convert.ToString(ViewState["SortExpression"]);
if (SortExpDirection == "")
SortExpDirection = "Id";
if (Convert.ToString(ViewState["SortDirection"]).Equals(""))
ViewState["SortDirection"] = "DESC";
SortExpDirection += " " + ViewState["SortDirection"];
dataView.Sort = SortExpDirection;
GridView1.DataSource = dataView;
GridView1.DataBind();
}
catch (Exception ex)
{

}
finally
{
if (dataView != null)
dataView.Dispose();
}
}

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
if (ViewState["SortExpression"] != null)
{
String sortDirection = Convert.ToString(ViewState["SortDirection"]);
String sortExpression = Convert.ToString(ViewState["SortExpression"]);
if (sortExpression == e.SortExpression)
{
ViewState["SortDirection"] = ChangeDirection(sortDirection);
}
else
{
ViewState["SortExpression"] = e.SortExpression;
ViewState["SortDirection"] = "ASC";
}
}
else
{
ViewState["SortExpression"] = e.SortExpression;
ViewState["SortDirection"] = "ASC";
}
DataView dataView = null;
try
{
dataView = new DataView(dataTable());
String SortExpDirection = Convert.ToString(ViewState["SortExpression"]);
SortExpDirection += " " + ViewState["SortDirection"];
dataView.Sort = SortExpDirection;
GridView1.DataSource = dataView;
GridView1.DataBind();
}
catch (Exception ex)
{

}
finally
{
if (dataView != null)
dataView.Dispose();
}
}

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.Header)
{
string NomeColonna;
for (int i = 0; i < 4; i++)
{
// Recupero il controllo che sta nella cella dell'header
//che è un LinkButton
LinkButton LinkButtonOrdinamento = (LinkButton)e.Row.Cells[i].Controls[0];
NomeColonna = LinkButtonOrdinamento.Text;

//Creo il controllo ImageButton
ImageButton ImageButtonOrdinamento = new ImageButton();
ImageButtonOrdinamento.CommandName = LinkButtonOrdinamento.CommandName;
string commandArgument = LinkButtonOrdinamento.CommandArgument;
ImageButtonOrdinamento.CommandArgument = commandArgument;
ImageButtonOrdinamento.ToolTip = "Ordina per " + NomeColonna;
ImageButtonOrdinamento.Width = (Unit)10;

//stabilisco l'immagine da visualizzare
ImageButtonOrdinamento.ImageUrl = "~/images/sort_up_blank.png";
if (ViewState["SortExpression"] != null)
{
String sortExpression = Convert.ToString(ViewState["SortExpression"]);
if (LinkButtonOrdinamento.CommandArgument == sortExpression)
{
if (Convert.ToString(ViewState["SortDirection"]) == "DESC")
{
ImageButtonOrdinamento.ImageUrl = "~/images/sort_down.png";
}
else
{
ImageButtonOrdinamento.ImageUrl = "~/images/sort_up.png";
}
}
}
ImageButtonOrdinamento.Width = Unit.Pixel(16);
ImageButtonOrdinamento.Height = Unit.Pixel(16);
//Creo il controllo Label
Label labelNomeColonna = new Label();
labelNomeColonna.Text = NomeColonna + " ";
Table tableOrd = new Table();

TableRow tableRowOrd = new TableRow();
TableCell tableCell0 = new TableCell();
tableCell0.Controls.Add(labelNomeColonna);
tableRowOrd.Cells.Add(tableCell0);
TableCell tableCell1 = new TableCell();
tableCell1.Controls.Add(ImageButtonOrdinamento);
tableRowOrd.Cells.Add(tableCell1);
tableOrd.Rows.Add(tableRowOrd);

//cancello il controllo linkbutton dalla cella
e.Row.Cells[i].Controls.Remove(LinkButtonOrdinamento);

//Aggiungo il nuovo controllo
e.Row.Cells[i].Controls.Add(tableOrd);

}
}
}
catch (Exception ex)
{

}
}
public static String ChangeDirection(String oldDirection)
{
String newDirection = "";
switch (oldDirection)
{
case "ASC":
newDirection = "DESC";
break;
default:
newDirection = "ASC";
break;
}
return newDirection;
}
}

Ordinamento

giovedì 8 agosto 2013

Migliorare e incrementare traffico al blog gratuitamente

Una delle tante soluzioni gratuite per incrementare del traffico sul proprio blog, e quindi farsi conoscere meglio,
e magari incrementare traffico su app per Android o Iphone o comunque per smartphone sempre che qualcuno le abbia online sui vari market,
è quella di inserire il proprio blog su portali che non richiedono registrazioni come ad esempio:
pingler.com
pingomatic.com
pingoat.com
feedshark.com
androidappsgallery.com
apps400.com
androidappsreview.com
mobileappsgallery.com
androidtapp.com
scrubtheweb.com

Se ne trovano molti altri per promuovere il proprio blog, ma spesso viene richiesta una registrazione (spesso gratuita ma con una piccola perdita di tempo per il solito inserimento dati).
Per particolari accorgimenti o studio di traffico o parole chiave da utlizzare al meglio, arrivano sempre in aiuto le risorse Google all'indirizzo http://www.google.com/webmasters loggandosi con il proprio account Google e gestendo il proprio sito di interesse.

Lascio questo spazio aperto per chi vuole inserirne degli altri, magari ne nascono di nuovi, ma sempre ed esclusivamente gratuiti e senza alcuna registrazione.

venerdì 2 agosto 2013

Caricamento dati da MS Excel in Visual Basic 6

Con queste poche righe di codice è possibile leggere dei dati su di un file MS Excel e portarli in un oggetto list di Visual Basic.
Si crea una form tramite progetto "Exe" con un oggetto list chiamato List1, nel menu a tendina del progetto si fa riferimento all'oggetto MS Excel, e si integrano queste righe al caricamento della form.
Di seguito il sorgente e screenshot:

Private Sub Form_Load()
Dim objXls As Excel.Application
Dim wb As Workbook
Dim ws As Worksheet
Dim varValue As Variant
Dim i As Integer

Set objXls = New Excel.Application
Set wb = objXls.Workbooks.Open("C:\Documents and Settings\admin\Desktop\car\car.xls")
Set ws = wb.Worksheets("CAR")

For i = 2 To 11
varValue = ws.Cells(i, 1) & " " & ws.Cells(i, 2)
List1.AddItem (varValue)
Next

wb.Close
objXls.Quit
Set ws = Nothing
Set wb = Nothing
Set objXls = Nothing
End Sub

Form di esempio con una lista


Riferimento dell'oggetto Excel


Dati su foglio Excel


Record sulla lista