PDA

View Full Version : visual studio [c#]


contedracula
07-06-2014, 13:02
ciao a tutti mi chiamo giuseppe, scrivo questo post perche' ho un problema che non riesco a risolvere e richiedo gentilmente un vostro aiuto.
L'errore che ricevo e' il seguente :

Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Si prega di leggere l'analisi dello stack per ulteriori informazioni sull'errore e dove ha avuto origine nel codice.

Dettagli eccezione: System.IndexOutOfRangeException: Non c'è riga alla posizione 0.

Errore Origine:

Un'eccezione non gestita è stata generata durante l'esecuzione della richiesta Web corrente. Per informazioni sull'origine e la posizione dell'eccezione possono essere identificate utilizzando l'analisi dello stack dell'eccezione riportata di seguito:

Stack Trace:


[IndexOutOfRangeException: Non c'è riga alla posizione 0.]
***System.Data.RBTree `1.GetNodeByIndex (Int32 IndiceUtente) 1.649.146
***Logistica.DPI.assegnaDPI.ddlutenti_SelectedIndexChanged (Object sender, EventArgs e) 2143
***System.Web.UI.WebControls.ListControl.OnSelectedIndexChanged (EventArgs e) 118
***System.Web.UI.WebControls.DropDownList.RaisePostDataChangedEvent () 143
***System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent() +10
***System.Web.UI.Page.RaiseChangedEvents () 134
***System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 5201

wingman87
07-06-2014, 13:55
Sembra che stai tentando di leggere dei dati in una struttura che non ne contiene.

contedracula
07-06-2014, 14:05
Sembra che stai tentando di leggere dei dati in una struttura che non ne contiene.

intanto ti ringrazio della risposta... come posso risolvere?

wingman87
07-06-2014, 14:32
Senza maggiori informazioni non posso risponderti. E' chiaro che per qualche motivo la struttura a cui stai accedendo non contiene dati. E' da verificare se questo sia da considerarsi corretto o meno. Nel primo caso l'errore sta nel tentativo di accedervi, nel secondo caso è da verificare perché la struttura non è stata riempita.

contedracula
07-06-2014, 14:41
Senza maggiori informazioni non posso risponderti. E' chiaro che per qualche motivo la struttura a cui stai accedendo non contiene dati. E' da verificare se questo sia da considerarsi corretto o meno. Nel primo caso l'errore sta nel tentativo di accedervi, nel secondo caso è da verificare perché la struttura non è stata riempita.

provo a riportare il codice.. spero che cosi' riesci a capire :


namespace Logistica.DPI
{
public partial class assegnaDPI : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["username"] == null)
Response.Redirect("~/Account/Login.aspx?msg=Sessione Scaduta. Ripetere il Login!");
if (!IsPostBack)
{
ddlqualifica.DataSource = ManagerUser.getQualifiche(0, "", "nome", "asc");
ddlqualifica.DataTextField = "nome";
ddlqualifica.DataValueField = "nome";
ddlqualifica.DataBind();
ddlqualifica.Items.Insert(0, new ListItem("", ""));
ddlqualifica.Items.Insert(1, "Altro");
ddlqualifica.Items.Insert(2, "Coperta");
ddlqualifica.Items.Insert(3, "Macchina");
DataTable dt = ManagerUser.GetAllUser(0, txtcognome.Text, txtnome.Text, txtmatricola.Text, txtmercantile.Text, ddlqualifica.SelectedValue, "", "", "", "", "", "", "", "", "", (Session["tipodpi"].ToString().Equals("1") ? "1" : ""), "", (Session["tipodpi"].ToString().Equals("2") ? "1" : ""), (Session["tipodpi"].ToString().Equals("3") ? "1" : ""),"","", "cognome", "asc");
for (int i = 0; i < dt.Rows.Count; i++)
{
ddlutenti.Items.Add(new ListItem(dt.Rows[i]["cognome"] + " " + dt.Rows[i]["nome"] + "-" + dt.Rows[i]["matricola"] + " " + dt.Rows[i]["qualifica"], dt.Rows[i]["id_utente"].ToString()));
}
ddlutenti.Items.Insert(0, new ListItem("", ""));
if (!Session["dpi"].ToString().Equals("2") && !Session["mdpimes"].ToString().Equals("1") && !Session["mdpivsg"].ToString().Equals("1"))
Bassegna.Enabled = false;
}
}

protected void Button1_Click(object sender, EventArgs e)
{
lblsezione.Visible = false;
lblsezionevalore.Visible = false;
lblqualifica.Visible = false;
lblaualificavalore.Visible = false;
lblerror.Visible = false;
griglia.Visible = false;
Bassegna.Visible = false;
ddlutenti.Items.Clear();
DataTable dt = ManagerUser.GetAllUser(0, txtcognome.Text, txtnome.Text, txtmatricola.Text, txtmercantile.Text, ddlqualifica.SelectedValue, "", "", "", "", "", "", "", "", "", (Session["tipodpi"].ToString().Equals("1") ? "1" : ""), "",(Session["tipodpi"].ToString().Equals("2")?"1":""),(Session["tipodpi"].ToString().Equals("3")?"1":""),"","", "cognome", "asc");
for (int i = 0; i < dt.Rows.Count; i++)
{
ddlutenti.Items.Add(new ListItem(dt.Rows[i]["cognome"] + " " + dt.Rows[i]["nome"] + "-" + dt.Rows[i]["matricola"] + " " + dt.Rows[i]["qualifica"], dt.Rows[i]["id_utente"].ToString()));
}
ddlutenti.Items.Insert(0, new ListItem("", ""));
}

protected void ddlutenti_SelectedIndexChanged(object sender, EventArgs e)
{
lblsezione.Visible = true;
lblsezionevalore.Visible = true;
lblqualifica.Visible = true;
lblaualificavalore.Visible = true;
lblerror.Visible = false;
int id = 0;
try
{
id = Convert.ToInt32(ddlutenti.SelectedValue);
}
catch (Exception)
{ }
DataTable dt = ManagerUser.GetAllUser(id, txtcognome.Text, txtnome.Text, txtmatricola.Text, txtmercantile.Text, ddlqualifica.SelectedValue, "", "", "", "", "", "", "", "", "", (Session["tipodpi"].ToString().Equals("1") ? "1" : ""), "", (Session["tipodpi"].ToString().Equals("2") ? "1" : ""), (Session["tipodpi"].ToString().Equals("3") ? "1" : ""),"","", "cognome", "asc");
lblaualificavalore.Text = dt.Rows[0]["qualifica"].ToString();
lblsezionevalore.Text = dt.Rows[0]["sezione"].ToString();
Translate tt = new Translate();
griglia.Columns[0].HeaderText =
griglia.Columns[1].HeaderText = tt.TranslateTXT("//Resource/item[@name='misura']");tt.TranslateTXT("//Resource/item[@name='cnome']");
griglia.Columns[2].HeaderText = tt.TranslateTXT("//Resource/item[@name='partecorpo']");
griglia.Columns[3].HeaderText = tt.TranslateTXT("//Resource/item[@name='quantita']");
griglia.Columns[4].HeaderText = tt.TranslateTXT("//Resource/item[@name='dataconsegna']");
griglia.Columns[5].HeaderText = tt.TranslateTXT("//Resource/item[@name='datascadenza']");
griglia.Columns[6].HeaderText = tt.TranslateTXT("//Resource/item[@name='destinatari']");
griglia.DataSource = ManagerDPI.getDPISpettanti(dt.Rows[0]["sezione"].ToString(), dt.Rows[0]["qualifica"].ToString(),Session["tipodpi"].ToString());
griglia.DataBind();


griglia.Visible = true;
Bassegna.Visible = true;
Bassegna.Enabled = true;
}

protected void griglia_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("ddlmisura");
DataTable dt = ManagerDPI.getDPIinMagazzino(0, Convert.ToInt32(griglia.DataKeys[e.Row.RowIndex].Value), "", "",Session["tipodpi"].ToString(), "descrizione", "asc");
for (int i = 0; i < dt.Rows.Count; i++)
{
if (Convert.ToInt32(dt.Rows[i]["quantita"].ToString()) > 0)
ddl.Items.Add(new ListItem(dt.Rows[i]["descrizione"].ToString(), dt.Rows[i]["id"].ToString()));
}
if (ddl.Items.Count > 0)
{
ddl.Items.Insert(0, new ListItem("", ""));
ddl.Enabled = true;
TextBox tb = (TextBox)e.Row.FindControl("txtdataconsegna");
tb.Enabled = true;
tb.Text = DateTime.Now.ToString("dd/MM/yyyy");
tb = (TextBox)e.Row.FindControl("txtdatascadenza");
tb.Enabled = true;
tb = (TextBox)e.Row.FindControl("txtquantita");
tb.Enabled = true;
}
else
{
ddl.Items.Insert(0, new ListItem("N/A", ""));
ddl.Enabled = false;
TextBox tb = (TextBox)e.Row.FindControl("txtdataconsegna");
tb.Enabled = false;
tb = (TextBox)e.Row.FindControl("txtdatascadenza");
tb.Enabled = false;
tb = (TextBox)e.Row.FindControl("txtquantita");
tb.Enabled = false;
}
}
}

protected void Bassegna_Click(object sender, EventArgs e)
{
bool esito = false;
OracleConnection connection = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
connection.Open();
OracleTransaction tran = connection.BeginTransaction();
esito = ManagerDPI.aggiornaDPIcorrenti(connection, tran, Convert.ToInt32(ddlutenti.SelectedValue));
if (esito)
{
int contatore = 0;
for (int i = 0; i < griglia.Rows.Count; i++)
{
DropDownList ddl = (DropDownList)griglia.Rows[i].FindControl("ddlmisura");
TextBox quantita = (TextBox)griglia.Rows[i].FindControl("txtquantita");
TextBox data_consegna = (TextBox)griglia.Rows[i].FindControl("txtdataconsegna");
TextBox data_scadenza = (TextBox)griglia.Rows[i].FindControl("txtdatascadenza");
if (ddl.Enabled && ddl.SelectedIndex>0)
{
if (!quantita.Text.Equals("0"))
{
esito = ManagerDPI.assegnaDPI(connection, tran, Convert.ToInt32(ddlutenti.SelectedValue), Convert.ToInt32(griglia.DataKeys[i].Value), Convert.ToInt32(ddl.SelectedValue), "", data_consegna.Text, data_scadenza.Text, Convert.ToInt32(quantita.Text));
if (!esito)
{
Llblerror.Key= "erroreassegnadpi";
lblerror.ForeColor = Color.Red;
lblerror.Visible = true;
tran.Rollback();
connection.Close();
return;
}
contatore++;
}
}

}
if (contatore > 0)
{
Llblerror.Key = "assegnazionedpi";
lblerror.ForeColor = Color.Green;
lblerror.Visible = true;
tran.Commit();
connection.Close();
OpenNewWindow("PDFReportDPIUtente.aspx?id_utente=" + ddlutenti.SelectedValue + "&corrente=1&dal=&al=&dal1=&al1=&sortExp=&sortDir=");
Bassegna.Enabled = false;
}
else
{
Llblerror.Key = "nodpiselected";
lblerror.ForeColor = Color.Red;
lblerror.Visible = true;
tran.Rollback();
connection.Close();
}
}
else
{
Llblerror.Key = "erroreassegnadpi";
lblerror.ForeColor = Color.Red;
lblerror.Visible = true;
tran.Rollback();
connection.Close();
}
}
public void OpenNewWindow(string url)
{
ClientScript.RegisterStartupScript(this.GetType(), "newWindow", String.Format("<script>window.open('{0}');</script>", url));
}

}
}

grazie 1000

wingman87
07-06-2014, 14:57
Mettilo in un tag CODE, altrimenti non si capisce nulla.
Puoi commentare anche un po' la logica del programma in modo da far capire il contesto e la finalità e rendere più facile la comprensione del codice?

sottovento
07-06-2014, 17:11
L'aiuto che il dump dello stack ti fornisce e' essenziale.
Purtroppo hai incollato il codice cosi' com'e', quindi ci stai negando proprio questo aiuto.
Sarebbe meraviglioso sapere qual e' la riga 2143!!
L'unica informazione che hai lasciato passare e' che l'errore e' all'interno del metodo ddlutenti_SelectedIndexChanged() e che si tratta di un accesso ad un array alla posizione 0, che sembra non esistere.

protected void ddlutenti_SelectedIndexChanged(object sender, EventArgs e)
{
lblsezione.Visible = true;
lblsezionevalore.Visible = true;
lblqualifica.Visible = true;
lblaualificavalore.Visible = true;
lblerror.Visible = false;
int id = 0;
try
{
id = Convert.ToInt32(ddlutenti.SelectedValue);
}
catch (Exception)
{ }
DataTable dt = ManagerUser.GetAllUser(id, txtcognome.Text, txtnome.Text, txtmatricola.Text, txtmercantile.Text, ddlqualifica.SelectedValue, "", "", "", "", "", "", "", "", "", (Session["tipodpi"].ToString().Equals("1") ? "1" : ""), "", (Session["tipodpi"].ToString().Equals("2") ? "1" : ""), (Session["tipodpi"].ToString().Equals("3") ? "1" : ""),"","", "cognome", "asc");
lblaualificavalore.Text = dt.Rows[0]["qualifica"].ToString();
lblsezionevalore.Text = dt.Rows[0]["sezione"].ToString();
Translate tt = new Translate();
griglia.Columns[0].HeaderText =
griglia.Columns[1].HeaderText = tt.TranslateTXT("//Resource/item[@name='misura']");tt.TranslateTXT("//Resource/item[@name='cnome']");
griglia.Columns[2].HeaderText = tt.TranslateTXT("//Resource/item[@name='partecorpo']");
griglia.Columns[3].HeaderText = tt.TranslateTXT("//Resource/item[@name='quantita']");
griglia.Columns[4].HeaderText = tt.TranslateTXT("//Resource/item[@name='dataconsegna']");
griglia.Columns[5].HeaderText = tt.TranslateTXT("//Resource/item[@name='datascadenza']");
griglia.Columns[6].HeaderText = tt.TranslateTXT("//Resource/item[@name='destinatari']");
griglia.DataSource = ManagerDPI.getDPISpettanti(dt.Rows[0]["sezione"].ToString(), dt.Rows[0]["qualifica"].ToString(),Session["tipodpi"].ToString());
griglia.DataBind();


griglia.Visible = true;
Bassegna.Visible = true;
Bassegna.Enabled = true;
}


Sara' questo?

int id = 0;
try
{
id = Convert.ToInt32(ddlutenti.SelectedValue);
}
catch (Exception)
{ }


Oppure questo?

lblaualificavalore.Text = dt.Rows[0]["qualifica"].ToString();


O questo ancora?

griglia.Columns[0].HeaderText =
griglia.Columns[1].HeaderText = tt.TranslateTXT("//Resource/item[@name='misura']");tt.TranslateTXT("//Resource/item[@name='cnome']");


o questo?

griglia.DataSource = ManagerDPI.getDPISpettanti(dt.Rows[0]["sezione"].ToString(), dt.Rows[0]["qualifica"].ToString(),Session["tipodpi"].ToString());


Chissa'... solo chi conosce qual e' la riga 2143 puo' rispondere....

contedracula
08-06-2014, 10:35
L'aiuto che il dump dello stack ti fornisce e' essenziale.
Purtroppo hai incollato il codice cosi' com'e', quindi ci stai negando proprio questo aiuto.
Sarebbe meraviglioso sapere qual e' la riga 2143!!
L'unica informazione che hai lasciato passare e' che l'errore e' all'interno del metodo ddlutenti_SelectedIndexChanged() e che si tratta di un accesso ad un array alla posizione 0, che sembra non esistere.

protected void ddlutenti_SelectedIndexChanged(object sender, EventArgs e)
{
lblsezione.Visible = true;
lblsezionevalore.Visible = true;
lblqualifica.Visible = true;
lblaualificavalore.Visible = true;
lblerror.Visible = false;
int id = 0;
try
{
id = Convert.ToInt32(ddlutenti.SelectedValue);
}
catch (Exception)
{ }
DataTable dt = ManagerUser.GetAllUser(id, txtcognome.Text, txtnome.Text, txtmatricola.Text, txtmercantile.Text, ddlqualifica.SelectedValue, "", "", "", "", "", "", "", "", "", (Session["tipodpi"].ToString().Equals("1") ? "1" : ""), "", (Session["tipodpi"].ToString().Equals("2") ? "1" : ""), (Session["tipodpi"].ToString().Equals("3") ? "1" : ""),"","", "cognome", "asc");
lblaualificavalore.Text = dt.Rows[0]["qualifica"].ToString();
lblsezionevalore.Text = dt.Rows[0]["sezione"].ToString();
Translate tt = new Translate();
griglia.Columns[0].HeaderText =
griglia.Columns[1].HeaderText = tt.TranslateTXT("//Resource/item[@name='misura']");tt.TranslateTXT("//Resource/item[@name='cnome']");
griglia.Columns[2].HeaderText = tt.TranslateTXT("//Resource/item[@name='partecorpo']");
griglia.Columns[3].HeaderText = tt.TranslateTXT("//Resource/item[@name='quantita']");
griglia.Columns[4].HeaderText = tt.TranslateTXT("//Resource/item[@name='dataconsegna']");
griglia.Columns[5].HeaderText = tt.TranslateTXT("//Resource/item[@name='datascadenza']");
griglia.Columns[6].HeaderText = tt.TranslateTXT("//Resource/item[@name='destinatari']");
griglia.DataSource = ManagerDPI.getDPISpettanti(dt.Rows[0]["sezione"].ToString(), dt.Rows[0]["qualifica"].ToString(),Session["tipodpi"].ToString());
griglia.DataBind();


griglia.Visible = true;
Bassegna.Visible = true;
Bassegna.Enabled = true;
}


Sara' questo?

int id = 0;
try
{
id = Convert.ToInt32(ddlutenti.SelectedValue);
}
catch (Exception)
{ }


Oppure questo?

lblaualificavalore.Text = dt.Rows[0]["qualifica"].ToString();


O questo ancora?

griglia.Columns[0].HeaderText =
griglia.Columns[1].HeaderText = tt.TranslateTXT("//Resource/item[@name='misura']");tt.TranslateTXT("//Resource/item[@name='cnome']");


o questo?

griglia.DataSource = ManagerDPI.getDPISpettanti(dt.Rows[0]["sezione"].ToString(), dt.Rows[0]["qualifica"].ToString(),Session["tipodpi"].ToString());


Chissa'... solo chi conosce qual e' la riga 2143 puo' rispondere....

ciao.. grazie per la risposta.. io ho cercato questa riga ma aprendo con visual studio ho visto che arriva alla riga 199 ..
ti domando puo' essere che ho la versione di visual studio 2012 e da quelo che ho capito mi continua a cercare di leggere il file in d:\documenti\visualstudio2010\projecte\ecc.ecc
invece il mio attuale percorso e' c:\visualstudio2012.
E' possibile che sia questo il problema? se si come potrei fare per risolverlo?

sottovento
08-06-2014, 17:00
ciao.. grazie per la risposta.. io ho cercato questa riga ma aprendo con visual studio ho visto che arriva alla riga 199 ..
ti domando puo' essere che ho la versione di visual studio 2012 e da quelo che ho capito mi continua a cercare di leggere il file in d:\documenti\visualstudio2010\projecte\ecc.ecc
invece il mio attuale percorso e' c:\visualstudio2012.
E' possibile che sia questo il problema? se si come potrei fare per risolverlo?

Mi sembra strano che sia un problema simile; tuttavia sappiamo entrambi che non dobbiamo stupirci per nulla ;)

Fai una prova semplice: apri il tuo file nella cartelle corretta e scrivici dentro qualche stupidata, magari all'inizio del file.
Poi torna in Visual Studio, controlla se c'e' e prova a compilare.
Dovresti ottenere un errore e riconoscere la tua scritta stupida, giusto?

Se non vedi nulla, magari stai puntando da qualche altra parte. Per caso hai copiato il progetto, invece di generarlo ex-novo?

contedracula
08-06-2014, 19:01
Mi sembra strano che sia un problema simile; tuttavia sappiamo entrambi che non dobbiamo stupirci per nulla ;)

Fai una prova semplice: apri il tuo file nella cartelle corretta e scrivici dentro qualche stupidata, magari all'inizio del file.
Poi torna in Visual Studio, controlla se c'e' e prova a compilare.
Dovresti ottenere un errore e riconoscere la tua scritta stupida, giusto?

Se non vedi nulla, magari stai puntando da qualche altra parte. Per caso hai copiato il progetto, invece di generarlo ex-novo?

no non l'ho copiato.. mi hanno dato questo codice e mi hanno detto che c'erano 2 problemi... uno l'ho risolto e ora mi sono imbattuto in questo, e non capendo sto cercando aiuto in voi ... secondo te devo vedere gli array? puo' essere che i numeri non coincidono? se si in caso puoi dirmi per favore come vederli? c'e' un modo per dirgli di puntare a un'altra directory? oppure provo cambiando i numeri che mi hai citato nei pezzi nel post precedente?

so che ti sto rompendo.. ma spero che mi puoi aiutare