PDA

View Full Version : [c#] problema assegnazione valore comboBox da valori generati da Linq


3nigma666
25-05-2011, 17:16
Buondi,

ho un problema con Linq, una public class e una comboBox.

In sostanza ho:


var ServizioLocalita = from T in mioDatabase.ServiziDiConsegnaTipologie
join S in mioDatabase.ServiziDiConsegna on T.ServiziDiConsegnaID equals S.ID
where (S.ID == (int)comboServizio.SelectedValue)
select new OreDiConsegna ( T.ID, T.Nome, 24, 0 );


comboBoxTipologia.DataSource = ServizioLocalita.ToList();
comboBoxTipologia.DisplayMember = "Nome";
comboBoxTipologia.ValueMember = "ID";

class OreDiConsegna
{
public int ID;
public string Nome;
public int ore;
public int aggiunte;

public OreDiConsegna(int id, string n, int orebase, int oreaggiunte)
{
ID = id;
Nome = n;
ore = orebase;
aggiunte = oreaggiunte;
}

public string returnNome()
{
return Nome;
}
}



e il problema si verifica qua:


comboBoxTipologia.ValueMember = "ID";


in quanto mi dice: Impossibile stabilire l'associazione al nuovo membro di visualizzazione.
Nome parametro: newDisplayMember

e non capisco perchè...
se commento //comboBoxTipologia.ValueMember = "ID"; nella combo box vedo come risultato:

nomeProgetto.OreDiConsegna e tutto funziona, solo che invece che visualizzare il contenuto della colonna mi visualizza la sorgente da cui prende i valori.

Come risolvere?

mi metto anche tutto il codice della form in questione

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;

namespace testbed
{
public partial class CreazionePresa : Form
{
#region Variabili
string nomeDatabase = "MioDatabase.xml";

bool stoAssegnandoDataSource = false;
#endregion

#region Inizializzazioni
public CreazionePresa(DataSetDatabasePrese db,string nomeUtente, string codiceUtente)
{
InitializeComponent();
if (db == null)
{
db = new DataSetDatabasePrese();
try { db.ReadXml(nomeDatabase); }
catch(Exception ex)
{
MessageBox.Show("Non riesco a caricare il Database rinizio da zero! Messaggio: "+ex.Message);
db.Clear();
}
}
AssegnaDataSource(db);
this.Text += " "+nomeUtente + " Codice: " + codiceUtente;
dateConsegnaTassativa.Enabled = false; //Se non è premuto il tasto: TASSATIVITA' non abilito il campo DATA TASSATIVA CONSEGNA
textBoxAssicurazione.Enabled = false;
textBoxEuro.Enabled = false;
comboServizio.DataSource = mioDatabase.ServiziDiConsegna;
comboServizio.DisplayMember = "Nome";
comboServizio.ValueMember = "ID";
comboServizio.SelectedIndex= -1;
comboBoxTipologia.SelectedIndex = -1;



}

/// <summary>Carico i dati dal DB e li assegno ai controlli</summary>
private void AssegnaDataSource(DataSetDatabasePrese db)
{
mioDatabase = db;
bindingSourceComboServizio.DataSource = mioDatabase.ServiziDiConsegna;
if (mieiColli.TipoCollo.Rows.Count == 0)
{
DataSetValoriSingolaPresa.TipoColloRow rigaTipo = mieiColli.TipoCollo.NewTipoColloRow();
rigaTipo.Nome = "EPAL (80/100x120)";
rigaTipo.Larghezza = 80;
rigaTipo.Lunghezza = 120;
rigaTipo.Altezza = 30;
rigaTipo.PesoMax = 1200;
rigaTipo.BancaleEPAL = true;
mieiColli.TipoCollo.AddTipoColloRow(rigaTipo);
rigaTipo = mieiColli.TipoCollo.NewTipoColloRow();
rigaTipo.Nome = "Mini Quarter Pallet";
rigaTipo.Larghezza = 80;
rigaTipo.Lunghezza = 120;
rigaTipo.Altezza = 30;
rigaTipo.PesoMax = 150;
rigaTipo.BancaleEPAL = true;
mieiColli.TipoCollo.AddTipoColloRow(rigaTipo);
rigaTipo = mieiColli.TipoCollo.NewTipoColloRow();
rigaTipo.Nome = "Quarter Pallet";
rigaTipo.Larghezza = 80;
rigaTipo.Lunghezza = 120;
rigaTipo.Altezza = 30;
rigaTipo.PesoMax = 300;
rigaTipo.BancaleEPAL = true;
mieiColli.TipoCollo.AddTipoColloRow(rigaTipo);
rigaTipo = mieiColli.TipoCollo.NewTipoColloRow();
rigaTipo.Nome = "Half Pallet";
rigaTipo.Larghezza = 80;
rigaTipo.Lunghezza = 120;
rigaTipo.Altezza = 30;
rigaTipo.PesoMax = 550;
rigaTipo.BancaleEPAL = true;
mieiColli.TipoCollo.AddTipoColloRow(rigaTipo);
rigaTipo = mieiColli.TipoCollo.NewTipoColloRow();
rigaTipo.Nome = "Full Pallet";
rigaTipo.Larghezza = 80;
rigaTipo.Lunghezza = 120;
rigaTipo.Altezza = 30;
rigaTipo.PesoMax = 1200;
rigaTipo.BancaleEPAL = true;
mieiColli.TipoCollo.AddTipoColloRow(rigaTipo);
rigaTipo = mieiColli.TipoCollo.NewTipoColloRow();
rigaTipo.Nome = "Light Pallet";
rigaTipo.Larghezza = 80;
rigaTipo.Lunghezza = 120;
rigaTipo.Altezza = 30;
rigaTipo.PesoMax = 550;
rigaTipo.BancaleEPAL = true;
mieiColli.TipoCollo.AddTipoColloRow(rigaTipo);
rigaTipo = mieiColli.TipoCollo.NewTipoColloRow();
rigaTipo.Nome = "Fasci";
rigaTipo.Larghezza = 80;
rigaTipo.Lunghezza = 120;
rigaTipo.Altezza = 30;
rigaTipo.PesoMax = 1200;
rigaTipo.BancaleEPAL = false;
mieiColli.TipoCollo.AddTipoColloRow(rigaTipo);
rigaTipo = mieiColli.TipoCollo.NewTipoColloRow();
rigaTipo.Nome = "Misure Libere";
rigaTipo.Larghezza = 0;
rigaTipo.Lunghezza = 0;
rigaTipo.Altezza = 0;
rigaTipo.PesoMax = 0;
rigaTipo.BancaleEPAL = false;
mieiColli.TipoCollo.AddTipoColloRow(rigaTipo);
comboServizio.DataSource = mioDatabase.ServiziDiConsegna;
comboServizio.DisplayMember = mioDatabase.ServiziDiConsegna.NomeColumn.ColumnName;
comboServizio.ValueMember = mioDatabase.ServiziDiConsegna.IDColumn.ColumnName;


}
}
#endregion

#region Bottoni

private bool VerificaMittente(out int oraRitiro, out int telMittente, out int cap)
{
oraRitiro = -1;
telMittente = -1;
cap = -1;
//Controllo di aver inserito l'orario della presa
if (textOraRitiro.Text != "")
{//Se è stata inserito un'ora si verifica che sia stata inserita solo in modo numerico.
if (!Int32.TryParse(textOraRitiro.Text, out oraRitiro))
{
MessageBox.Show("Il campo Ora Ritiro accetta solo numeri");
textOraRitiro.Focus();
return false;
}
}
//Controllo il mittente
if (textTelMittente.Text != "")
{//Controllare di aver inserito solo numeri nel campo telefono mittenti
if (!Int32.TryParse(textTelMittente.Text, out telMittente))
{
MessageBox.Show("Il campo telefono mittente deve contenere solo numeri");
textTelMittente.Focus();
return false;
}
}

//Controlla la lunghezza del campo in question
if (textNomeDittaMittente.TextLength <= 0)
{
//Avvisa l'utente del perchè questo è un problema
MessageBox.Show("Attenzione devi dirmi da dove quale cliente vuoi ritirare la merce");
//Manda il focus sul campo incriminato
textNomeDittaMittente.Focus();
//Esci dalla funzione
return false;
}
if (textLocalitaMittente.TextLength <= 0)
{
MessageBox.Show("Attenzione devi dirmi in quale localita vuoi ritirare");
textLocalitaMittente.Focus();
return false;
}
if (textIndirizzoMittente.TextLength <= 0)
{
MessageBox.Show("Attenzione devi dirmi da quale indirizzo vuoi ritirare");
textIndirizzoMittente.Focus();
return false;
}

if (textProvinciaMittente.TextLength <= 0)
{
MessageBox.Show("Attenzione devi dirmi inserire da quale provincia si ritira");
textProvinciaMittente.Focus();
return false;
}

if (textCapMittente.Text != "")
{
if (!Int32.TryParse(textCapMittente.Text, out cap))
{
MessageBox.Show("Attenzione Devi inserire il campo CAP solo con numeri");
textCapMittente.Focus();
return false;
}
}
return true;
}

/// <summary>Salva la presa nel DB</summary>
/// <param name="sender"></param><param name="e"></param>
/// <remarks>ToDo: Nei controlli inserire la parte che verifica che per la presa esistente siano stati inseriti dei bancali, almeno un bancale.
/// Per ora controlla esclusivamente che sia stato inserito un bancale nella memoria temporanea e non nel database. </remarks>
private void SalvaPresa(object sender, EventArgs e)
{
#region Variabili
int clienteId = -1;
int indirizzoClienteID = -1;
int telMittente = -1;
int oraRitiro = -1;
int oraConsegna = 0;
int cap = -1;
int euro = -1;
List<DataSetDatabasePrese.ColliRow> listaNuoviColliDaInserire;
#endregion
#region Controllo valori
//Controllo il Mittente
#region CheckMittente
if (!VerificaMittente(out oraRitiro,out telMittente,out cap))
return;
#endregion
#region CheckDestinatario
//Ora controllo il Destinatario

if (textLocalitaDestinatario.Text == "")
{
MessageBox.Show("Devi inserire la località di destino. Se sono più località basta scrivere le dicitura 'VARIE'");
textLocalitaDestinatario.Focus();
return;
}
#endregion
#region checkNoteSpedizioni
if (checkBoxTassativita.Checked)
{//Se è stata inserita la tassatività

if (dateDataDiRitiro == dateConsegnaTassativa)
{//controllare
MessageBox.Show("La data di consegna Tassativa non può esser uguale alla data di ritiro");
dateConsegnaTassativa.Focus();
return;
}
}
#endregion
#region Prezzo
if (checkBoxPrezzo.Checked == true)
{
if (textBoxEuro.Text == "")
{
MessageBox.Show("Devi inserire il prezzo pattutito o togliere la spunta da Prezzo pattutito");
textBoxEuro.Focus();
return;
}
if (!Int32.TryParse(textBoxEuro.Text, out euro))
{
MessageBox.Show("Il prezzo può contenere solo valori numerici!");
textBoxEuro.Focus();
return;
}
}
#endregion
#region Assicurazione
if (checkBoxAssicurazione.Checked && textBoxAssicurazione.Text != "")
{
int result;
if (!Int32.TryParse(textBoxAssicurazione.Text, out result))
{
MessageBox.Show("Devi inserire solo numeri nel campo Valore da Assicurare");
textBoxAssicurazione.Focus();
return;
}
}
else
{
MessageBox.Show("Devi inserire un valore nel campo assicurazione o, alternativamente togliere la spunta dal campo Valore da assicurare");
textBoxAssicurazione.Focus();
return;
}
#endregion

//Credo l'id del cliente e verifico se esiste gia
clienteId = OttieniIDCliente(textNomeDittaMittente.Text);
//Ottengo l'indirizzo ID del cliente
indirizzoClienteID = OttieniIDIndirizzoCliente(clienteId);


#region Controllo colli
if (mieiColli.Colli.Count == 0)
{
MessageBox.Show("Non hai inserito dei colli!");
return;
}

DataSetDatabasePrese.ColliRow nuovoCollo;
listaNuoviColliDaInserire = new List<DataSetDatabasePrese.ColliRow>(mieiColli.Colli.Count);
#region PER il TAG COLLI Controllo i dati inseriti e li copio dal DB temporaneo a quello vero
//Copia i colli dal DB temporaneo a quello vero
foreach (DataSetValoriSingolaPresa.ColliRow singoloCollo in mieiColli.Colli)
{
nuovoCollo = mioDatabase.Colli.NewColliRow();
if (!singoloCollo.IsNColloNull())
nuovoCollo.NCollo = singoloCollo.NCollo;
else
{
MessageBox.Show("Il campo N° Colli non può esser vuoto");
return;
}
//Copia i valori da una riga all'atra
if (!singoloCollo.IsAltezzaNull())
nuovoCollo.Altezza = singoloCollo.Altezza;
else
{
MessageBox.Show("Il campo Altezza non può esser vuoto");
return;
}
if (!singoloCollo.IsLarghezzaNull())
nuovoCollo.Larghezza = singoloCollo.Larghezza;
else
{
MessageBox.Show("Il campo Larghezza non può esser vuoto");
return;
}
if (!singoloCollo.IsLunghezzaNull())
nuovoCollo.Lunghezza = singoloCollo.Lunghezza;
else
{
MessageBox.Show("Il campo Lunghezza non può esser vuoto");
return;
}
if (singoloCollo.IsSovrapponibileNull())
nuovoCollo.Sovrapponibile = false;
else
nuovoCollo.Sovrapponibile = singoloCollo.Sovrapponibile;
if (!singoloCollo.IsDescrizioneNull())
nuovoCollo.Descrizione = singoloCollo.Descrizione;
//Se è un bancale EPAL aggiungi il numero di bancali usati!
//TODO: controlare per fasci e misure libere che NON sia EPAL!
if ((singoloCollo.IDTipoCollo >= 0) && (mieiColli.TipoCollo.FindByID(singoloCollo.IDTipoCollo).BancaleEPAL = true))
nuovoCollo.BancaleEPAL = nuovoCollo.NCollo;
else//ALtrimenti non ci sono bancali epal!
nuovoCollo.BancaleEPAL = 0;



nuovoCollo.Peso = singoloCollo.Peso;
//E ora aggiungilo!
listaNuoviColliDaInserire.Add(nuovoCollo);
}
#endregion
#region PER IL TAG METRILINEARI/CUBI controllo i dati inseriti e li copio dal DB temporaneo a quello vero
//Ora copia i vlaori dal DB temporaneo a quello vero
foreach (DataSetValoriSingolaPresa.MetriLineariCubiRow singoloValore in mieiColli.MetriLineariCubi)
{
nuovoCollo = mioDatabase.Colli.NewColliRow();
//Se ho i metri lineari creo un collo fittizio di altezza massima, larghezza massima e lunghezza definita
//calcola i valori di altezza e larghezza
if (!singoloValore.IsMetriLineariNull())
{
nuovoCollo.Altezza = 270;
nuovoCollo.Larghezza = 240;
nuovoCollo.Lunghezza = singoloValore.MetriLineari;
}
//Per i metri cubi li converto anche qui in altezza lunghezza e larghezza
if (!singoloValore.IsMetriCubiNull())
{

}
//E ora aggiungilo!
listaNuoviColliDaInserire.Add(nuovoCollo);
}
#endregion
#endregion
#endregion

//Se sono qui significa che SO che tutti i campi sono validi
//non li controllero piu
//I nuovi colli sono TUTTI dentro la lista listaNuoviColliDaInserire

//Creo una nuova presa
DataSetDatabasePrese.PresaRow nuovaPresa = mioDatabase.Presa.NewPresaRow();
#region Riempi la presa con i suoi valori
//Riempio i valori della presa
nuovaPresa.TassativitaRitiro = checkRitiroTassativo.Checked;
nuovaPresa.TassativitaConsegna = checkBoxTassativita.Checked;
nuovaPresa.IDIndirizzoRitiro = indirizzoClienteID;
nuovaPresa.IDClientePaga = clienteId;
nuovaPresa.Note = textNote.Text;
nuovaPresa.Adr = checkBoxAdr.Checked;
nuovaPresa.Centinato = checkBoxCentinato.Checked;
nuovaPresa.DataCreazione = DateTime.Now;
nuovaPresa.DataRitiro = new DateTime(dateDataDiRitiro.Value.Year,dateDataDiRitiro.Value.Month,dateDataDiRitiro.Value.Day,oraRitiro,1,1);
nuovaPresa.DataConsegna = new DateTime(dateConsegnaTassativa.Value.Year, dateConsegnaTassativa.Value.Month, dateConsegnaTassativa.Value.Day, oraConsegna, 1, 1);
if (checkboxPortoAssegnato.Checked)
nuovaPresa.Pagamento = "Assegnato";
if (checkPortoFranco.Checked)
nuovaPresa.Pagamento = "Franco";
nuovaPresa.PrezzoPattuito = checkBoxPrezzo.Checked;
nuovaPresa.Euro = euro;
#endregion
//salvo la presa nel database!
mioDatabase.Presa.AddPresaRow(nuovaPresa);

//Riga che serve per l'abbinamento
DataSetDatabasePrese.ColliPresaRow abbinamento;
//Ore crea i colli
foreach (DataSetDatabasePrese.ColliRow collo in listaNuoviColliDaInserire)
{
mioDatabase.Colli.AddColliRow(collo);
//Crea un singolo abbinamento
abbinamento = mioDatabase.ColliPresa.NewColliPresaRow();
//Compilalo
abbinamento.IDCollo = collo.ID;
abbinamento.IDPresa = nuovaPresa.ID;
//inseriscilo nella tabella di collegamento
mioDatabase.ColliPresa.AddColliPresaRow(abbinamento);
}

//Ok ora salvo nel file XML
mioDatabase.WriteXml(nomeDatabase);

MessageBox.Show("Presa Inserita");
this.Close();
}
#endregion

#region Utilizo del Database
/// <summary>Abbina l'indirizzo al cliente</summary>
/// <param name="nuovoCliente">la riga del cliente</param>
public void abbIndirizzoClienti(DataSetDatabasePrese.ClientiRow nuovoCliente)
{
DataSetDatabasePrese.IndirizziClientiRow abbinamentoIndirizziClienti;//Dichiaro una nuova variabile
abbinamentoIndirizziClienti = mioDatabase.IndirizziClienti.NewIndirizziClientiRow();//inizializzo nel database la nuova riga
abbinamentoIndirizziClienti.IDClienti = nuovoCliente.ID; // inserisco l'id cliente
abbinamentoIndirizziClienti.IDIndirizzi = OttieniIDIndirizzoCliente(nuovoCliente.ID); //inserisci l'id dell'indirizzo abbianto al cliente in questione
mioDatabase.IndirizziClienti.AddIndirizziClientiRow(abbinamentoIndirizziClienti);//salva su database i nuovi attributi appena ottenuti
}

/// <summary>Crea un nuovo cliente dal nome che mi hai scritto</summary>
/// <param name="nomeCliente"></param>
/// <returns>l'ID del cliente che ho usato</returns>
public int inserimentoNuovoCliente(string nomeCliente)
{
DataSetDatabasePrese.ClientiRow nuovoCliente;
nuovoCliente = mioDatabase.Clienti.NewClientiRow();
nuovoCliente.Nome = nomeCliente;
abbIndirizzoClienti(nuovoCliente);//abbino l'indirizzo al cliente
mioDatabase.Clienti.AddClientiRow(nuovoCliente);
return nuovoCliente.ID;
}

/// <summary>Ottiene un ID per un cliente con quel nome, o trovandolo o creandone uno nuovo</summary>
/// <param name="nomeCliente"></param>
/// <returns>l'ID del cliente</returns>
public int OttieniIDCliente(string nomeCliente)
{
//Guardiamo se c'è qualcuno con il nome uguale
DataRow[] risultato = mioDatabase.Clienti.Select("Nome = '" + nomeCliente + "'");
//Se non ha trovato nessuno non esiste un cliente del genere
if (risultato.Length == 0)
return inserimentoNuovoCliente(nomeCliente);
else
return ((DataSetDatabasePrese.ClientiRow)risultato[0]).ID;
}

#region OttieniIDIndirizzoCliente
private int OttieniIDIndirizzoCliente(int idCliente)
{
#region Controlla validita
#endregion

//Guardiamo se questo cliente ha un indirizzo
DataRow[] risultato = mioDatabase.Clienti.Select("ID = " + idCliente + "");
//Se non ha trovato nessuno non esiste un cliente del genere
if (risultato.Length == 0)
{
DataSetDatabasePrese.IndirizziRow nuovoIndirizzo = mioDatabase.Indirizzi.NewIndirizziRow();

//Tutto il resto
nuovoIndirizzo.Citta = textLocalitaMittente.Text;
nuovoIndirizzo.Indirizzo = textIndirizzoMittente.Text;
nuovoIndirizzo.CAP = textCapMittente.Text;
nuovoIndirizzo.Provincia = textProvinciaMittente.Text;
nuovoIndirizzo.Stato = "IT";

mioDatabase.Indirizzi.AddIndirizziRow(nuovoIndirizzo);
return nuovoIndirizzo.ID;
}
return ((DataSetDatabasePrese.ClientiRow)risultato[0]).ID;
}
#endregion

#endregion

#region Funzioni Estetische
/// <summary>Quando il datagrid trova un errore (esempio hai messo una lettera in un campo numero) segnalalo</summary>
/// <param name="sender"></param><param name="e"></param>
private void GestisciErrori(object sender, DataGridViewDataErrorEventArgs e)
{
MessageBox.Show("Il valore " + colliDataGridView.Columns[e.ColumnIndex].ToolTipText + " è errato! Messaggio: "+e.Exception.Message);
//colliDataGridView[e.ColumnIndex, e.RowIndex].Value = 6;
}

private void checkBoxTassativita_CheckedChanged(object sender, EventArgs e)
{
dateConsegnaTassativa.Enabled = checkBoxTassativita.Checked;
}
/// <summary>Abilita il campo Prezzo solo se scelgo di usarlo</summary>
/// <param name="sender"></param><param name="e"></param>
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
textBoxEuro.Enabled = checkBoxPrezzo.Checked;
}



private void button1_Click(object sender, EventArgs e)
{
this.Close();
}

private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
textBoxAssicurazione.Enabled = checkBoxAssicurazione.Checked;
}

private void comboBoxTipologia_SelectionChangeCommitted(object sender, EventArgs e)
{
if (comboBoxTipologia.SelectedItem != null)
{
textBoxTempoResa.Text = (((OreDiConsegna)comboBoxTipologia.SelectedItem).ore + ((OreDiConsegna)comboBoxTipologia.SelectedItem).aggiunte).ToString();
}
}
#endregion
private void comboServizio_SelectedIndexChanged(object sender, EventArgs e)
{
#region Assegno la sorgente di dati a ComboBoxTipologia
string Cap = textCapDestinatario.Text.ToLower();
string Localita = textLocalitaDestinatario.Text.ToLower();
string SiglaProvincia = textProvinciaDestinatario.Text.ToLower();
if (comboServizio.SelectedIndex >= 0)
{
//Prova a cercare la localita
var ServizioLocalita = from TR in mioDatabase.ServiziDiConsegnaTempiDiResa
join T in mioDatabase.ServiziDiConsegnaTipologie on TR.ServiziDiConsegnaTipologieID equals T.ID
join S in mioDatabase.ServiziDiConsegna on T.ServiziDiConsegnaID equals S.ID
where ((S.ID == (int)comboServizio.SelectedValue) &&
(TR.SiglaProvincia == SiglaProvincia) && (TR.Cap == Cap) && (TR.Localita == Localita))
select new OreDiConsegna (T.ID,T.Nome,TR.Ore,TR.AggiuntaOreTempoConsegna);
//Se non ho trovato niente prova senza localita
if (ServizioLocalita.Count() == 0)
{
ServizioLocalita = from TR in mioDatabase.ServiziDiConsegnaTempiDiResa
join T in mioDatabase.ServiziDiConsegnaTipologie on TR.ServiziDiConsegnaTipologieID equals T.ID
join S in mioDatabase.ServiziDiConsegna on T.ServiziDiConsegnaID equals S.ID
where ((S.ID == (int)comboServizio.SelectedValue) &&
(TR.SiglaProvincia == SiglaProvincia) && (TR.Cap == Cap) && (TR.Localita == ""))
select new OreDiConsegna(T.ID, T.Nome, TR.Ore, TR.AggiuntaOreTempoConsegna);
}
//Se non ho trovato niente prova senza cap
if (ServizioLocalita.Count() == 0)
{
ServizioLocalita = from TR in mioDatabase.ServiziDiConsegnaTempiDiResa
join T in mioDatabase.ServiziDiConsegnaTipologie on TR.ServiziDiConsegnaTipologieID equals T.ID
join S in mioDatabase.ServiziDiConsegna on T.ServiziDiConsegnaID equals S.ID
where ((S.ID == (int)comboServizio.SelectedValue) &&
(TR.SiglaProvincia == SiglaProvincia) && (TR.Cap == "") && (TR.Localita == ""))
select new OreDiConsegna ( T.ID, T.Nome, TR.Ore, TR.AggiuntaOreTempoConsegna );
}
//Se non ho trovato niente con la provincia mostra solo tutto!
if (ServizioLocalita.Count() == 0)
{
ServizioLocalita = from T in mioDatabase.ServiziDiConsegnaTipologie
join S in mioDatabase.ServiziDiConsegna on T.ServiziDiConsegnaID equals S.ID
where (S.ID == (int)comboServizio.SelectedValue)
select new OreDiConsegna ( T.ID, T.Nome, 24, 0 );
}

//AssegnoDataSource
if ((ServizioLocalita != null) && (ServizioLocalita.Count() >0))
{
//DataTable tab = new DataTable();
//tab.Columns.Add("ID");
//tab.Columns.Add("Nome");
//tab.Columns.Add("ore");
//tab.Columns.Add("aggiunte");

//for (int i = 0; i < ServizioLocalita.ToList().Count(); i++)
//{

// tab.Rows.Add(ServizioLocalita.ElementAt(i));

//}
//bindingSourceTipologia.DataSource = ServizioLocalita.ToList();
// comboBoxTipologia.DataSource = bindingSourceTipologia;
comboBoxTipologia.DataSource = ServizioLocalita.ToList();
comboBoxTipologia.DisplayMember = "Nome";
comboBoxTipologia.ValueMember = "ID";
stoAssegnandoDataSource = false;
}
}
#endregion
}

private void CreazionePresa_Load(object sender, EventArgs e)
{
CaricaValoriFasulli();
}
#region Verifica Indirizzi
private void VerificaIndirizzoDestinatario(object sender, EventArgs e)
{
//string Cap = textCapDestinatario.Text.ToLower();
//string Localita= textLocalitaDestinatario.Text.ToLower();
//string SiglaProvincia= textProvinciaDestinatario.Text.ToLower();
comboServizio_SelectedIndexChanged(null, null);
}

private void VerificaIndirizzoMittente(object sender, EventArgs e)
{
int oraRitiro, telMittente, cap;
if (!VerificaMittente(out oraRitiro, out telMittente, out cap))
return;
////Se sono qui l'indirizzo è corretto!
//string[] coordinate = testbed.ValidaIndirizzo.OttieniCoordinate(textLocalitaMittente.Text, textProvinciaMittente.Text, cap.ToString(), "IT", textIndirizzoMittente.Text, textCivicoMittente.Text);
//if ((coordinate != null) && (coordinate.Length == 2))
//{
// MessageBox.Show("Coordinate validate con successo!");
// ValidaIndirizzo schermataGoogle = new ValidaIndirizzo(textLocalitaMittente.Text, textProvinciaMittente.Text, textIndirizzoMittente.Text, textCivicoMittente.Text, textCapMittente.Text, "Italia");
// schermataGoogle.ShowDialog();
//}
}
#endregion
#region Tests
private void CaricaValoriFasulli()
{
int a = 0, b = 0;
int p, c;
mioDatabase.ServiziDiConsegna.Clear();
mioDatabase.ServiziDiConsegnaTipologie.Clear();
if ((mioDatabase != null) && (mioDatabase.ServiziDiConsegna.Count == 0))
{
p = mioDatabase.ServiziDiConsegna.AddServiziDiConsegnaRow("Palletways", "PP", 0).ID;
c = mioDatabase.ServiziDiConsegna.AddServiziDiConsegnaRow("Collettame", "PP", 0).ID;
a = mioDatabase.ServiziDiConsegnaTipologie.AddServiziDiConsegnaTipologieRow("Ecoonomiy", p).ID;
b = mioDatabase.ServiziDiConsegnaTipologie.AddServiziDiConsegnaTipologieRow("Premium", p).ID;
mioDatabase.ServiziDiConsegnaTipologie.AddServiziDiConsegnaTipologieRow("Standard", c);
mioDatabase.ServiziDiConsegnaTipologie.AddServiziDiConsegnaTipologieRow("Top Class", c);
}
mioDatabase.ServiziDiConsegnaTempiDiResa.Clear();
if ((mioDatabase != null) && (mioDatabase.ServiziDiConsegnaTempiDiResa.Count == 0))
{
mioDatabase.ServiziDiConsegnaTempiDiResa.AddServiziDiConsegnaTempiDiResaRow(a, "33170", "pordenone", "pn", 48, 0);
mioDatabase.ServiziDiConsegnaTempiDiResa.AddServiziDiConsegnaTempiDiResaRow(b, "33170", "pordenone", "pn", 24, 0);
mioDatabase.ServiziDiConsegnaTempiDiResa.AddServiziDiConsegnaTempiDiResaRow(a, "31100", "treviso", "tv", 96, 0);
mioDatabase.ServiziDiConsegnaTempiDiResa.AddServiziDiConsegnaTempiDiResaRow(b, "", "", "tv", 24, 0);
mioDatabase.ServiziDiConsegnaTempiDiResa.AddServiziDiConsegnaTempiDiResaRow(b, "", "", "pn", 24, 0);
mioDatabase.ServiziDiConsegnaTempiDiResa.AddServiziDiConsegnaTempiDiResaRow(a, "", "", "tv", 48, 0);
mioDatabase.ServiziDiConsegnaTempiDiResa.AddServiziDiConsegnaTempiDiResaRow(a, "", "", "pn", 48, 0);
}
mioDatabase.WriteXml(nomeDatabase);
}
#endregion


}

class OreDiConsegna
{
public int ID;
public string Nome;
public int ore;
public int aggiunte;

public OreDiConsegna(int id, string n, int orebase, int oreaggiunte)
{
ID = id;
Nome = n;
ore = orebase;
aggiunte = oreaggiunte;
}

public string returnNome()
{
return Nome;
}


}
}


grazie a tutti in anticipo!

tacchinox
25-05-2011, 21:47
Sicuro che non fosse comboBox.DisplayMember da impostare come "Id" ?

3nigma666
26-05-2011, 13:15
Sicuro che non fosse comboBox.DisplayMember da impostare come "Id" ?


Teoricamente no, perchè DisplayMember contiene il nome della colonna che voglio visualizzare (che nel mio caso è la colonna denominata NOME, che contiene il nome del servizio che sto inserendo o ho inserito nel database), mentre invece valuemember contiene il nome della colonna da dove vengono presi i valori da assegnare all'oggetto selezionato nella comboBox..