Archief - [PROG][C#] kleine fouten eindwerk

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

sluysen

Legacy Member
Voor mijn eindwerk maak ik een programma voor een traiteur, met enkele datagrids in, en ook de mogelijkheid om klanten/leveranciers/gerechten te zien en aan te passen.

nu heb ik enkele kleine foutjes waardoor ik niet verder kan..

eerst en vooral is een specified cast error op het rode stukje
de bedoeling is dat ik op kolom aantal in mijn datagrid klik, en dat er daarna een nieuw form verschijnt waar ik een aantal kan ingeven (in dit geval het aantal dat ik wil bestellen)
Code:
        private void gridBestelling_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            switch (gridBestelling.Columns[gridBestelling.CurrentCell.ColumnIndex].DataPropertyName.ToLower())
            {
                case "afbeelding":
                    Afbeelding frmAfbeelding = new Afbeelding(gridBestelling["foto", gridBestelling.CurrentCell.RowIndex].Value.ToString());
                    frmAfbeelding.ShowDialog();
                    break;
                case "aantal":
                    int idGerecht = (int)gridBestelling["idGerecht", gridBestelling.CurrentCell.RowIndex].Value;
                    DataRow[] r = Variabelen.dsGerechten.Tables["Gerechten"].Select("idGerecht='" + idGerecht + "'");
                   [COLOR="Red"] [B]int aantal = (int)r[0]["Aantal"];[/B][/COLOR]
                    AantalIngeven frmNummer = new AantalIngeven((int)r[0]["Aantal"]);
                    r[0]["Aantal"] = frmNummer.Aantal;
                    frmNummer.ShowDialog();
                    break;
            }
            gridBestelling.Refresh();
        }

verder krijg ik index is outside the bounds of the array op volgend rood stuk
Code:
        private void lstVoorstellen_SelectedIndexChanged(object sender, EventArgs e)
        {
            idVoorstel = (int)lstVoorstellen.SelectedIndex;

            DataRow[] r = Variabelen.dsVoorstellen.Tables["Voorstellen"].Select("idVoorstel='" + idVoorstel + "'");

[COLOR="Red"][B]            txtOmschrijving.Text = r[0]["omschrijving"].ToString();
            txtPrijsPerVoorstel.Text = r[0]["prijspervoorstel"].ToString();
            cmbCategorie.SelectedValue = r[0]["idCategorie"].ToString();[/B][/COLOR]
        }

iemand die me kan verder helpen?

Yngwie

Legacy Member
het eerste zie ik niet direct. het tweede als ge daar index out of bounds krijgt terwijl ge het 1ste element opvraagt wilt da zeggen da ge nen array van minder dan 1 elementen hebt, geen elementen dus. Waarschijnlijk loopt er iets mis met het ophalen van u data in de lijn erboven zodat u dataRow leeg is.

Bavo aka Joske

Legacy Member
Is de aantal kolom gedefinieerd als Integer type? Zoniet zal het String zijn, en zal je een toInteger of parseInteger methode moeten aanroepen op dat veld.
Allez, zo denkt javamens erover.

Je kan normaal geen String casten naar Integer

Albireo

Legacy Member
betreffende de eerste fout: kan het zijn dat "Aantal" DBNull is?

dat geeft een "System.InvalidCastException"

sluysen

Legacy Member
kga even de volledige klasse geven..
Code:
public partial class Bestellingen : Form
    {

        int idKlant;
        //int idGerecht;

        public Bestellingen()
        {
            InitializeComponent();
        }

        private void FigurenTonen()
        {
            btnZoeken.Image = Variabelen.imgZoeken;
            btnAfsluiten.Image = Variabelen.imgAfsluiten;
            btnNext.Image = Variabelen.imgVolgende;
        }
        
        private void Bestellingen_Load(object sender, EventArgs e)
        {
            GridBestellingTonen();
            FigurenTonen();
        }

        private void GridBestellingTonen()
        {
            //if (!Variabelen.dsBestellingen.Tables["Bestellingen"].Columns.Contains("prijspereenheid"))
            //    Variabelen.dsBestellingen.Tables["Bestellingen"].Columns.
            //        Add("prijspereenheid", System.Type.GetType("System.Byte[]"));
            if (!Variabelen.dsGerechten.Tables["Gerechten"].Columns.Contains("aantal"))
                Variabelen.dsGerechten.Tables["Gerechten"].Columns.
                    Add("aantal", System.Type.GetType("System.Byte[]"));
            if (!Variabelen.dsGerechten.Tables["Gerechten"].Columns.Contains("afbeelding"))
                Variabelen.dsGerechten.Tables["Gerechten"].Columns.
                Add("afbeelding", System.Type.GetType("System.Byte[]"));
            if (!Variabelen.dsGerechten.Tables["Gerechten"].Columns.Contains("winkelkar"))
                Variabelen.dsGerechten.Tables["Gerechten"].Columns.
                Add("winkelkar", System.Type.GetType("System.Byte[]"));


            gridBestelling.DataSource = Variabelen.dsGerechten.Tables["Gerechten"].DefaultView;

            DataGridViewTextBoxColumn colCategorie = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn colPrijs = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn colOmschrijving = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn colAantal = new DataGridViewTextBoxColumn();

            DataGridViewImageColumn colFoto = new DataGridViewImageColumn();
            DataGridViewImageColumn colWinkelkar = new DataGridViewImageColumn();


            ArrayList alZichtbareKolommen = new ArrayList();
            string[] zichtbareKolommen = { "idCategorie" };
            foreach (string kolom in zichtbareKolommen)
                alZichtbareKolommen.Add(kolom);

            foreach (DataGridViewColumn dgvc in gridBestelling.Columns)
            {
                if (!alZichtbareKolommen.Contains(dgvc.Name.ToLower()))
                    dgvc.Visible = false;
            }
            colOmschrijving.DataPropertyName = "omschrijving";
            colOmschrijving.HeaderText = "Omschrijving";
            colOmschrijving.Width = 250;
            colOmschrijving.MinimumWidth = 100;
            gridBestelling.Columns.Add(colOmschrijving);

            colPrijs.DataPropertyName = "prijspereenheid";
            colPrijs.HeaderText = "Prijs";
            colPrijs.Width = 40;
            colPrijs.SortMode = DataGridViewColumnSortMode.NotSortable;
            colPrijs.MinimumWidth = 40;
            gridBestelling.Columns.Add(colPrijs);

            colCategorie.DataPropertyName = "categorienaam";
            colCategorie.HeaderText = "Categorienaam";
            colCategorie.Width = 150;
            colCategorie.SortMode = DataGridViewColumnSortMode.Automatic;
            gridBestelling.Columns.Add(colCategorie);

            colFoto.DataPropertyName = "afbeelding";
            colFoto.HeaderText = "Afbeelding";
            colFoto.Width = 60;
            colFoto.ImageLayout = DataGridViewImageCellLayout.Zoom;
            gridBestelling.Columns.Add(colFoto);

            colAantal.DataPropertyName = "aantal";
            colAantal.HeaderText = "Aantal";
            colAantal.Width = 50;
            colAantal.SortMode = DataGridViewColumnSortMode.NotSortable;
            gridBestelling.Columns.Add(colAantal);

            //colWinkelkar.DataPropertyName = "winkelkar";
            //colWinkelkar.Width = 60;
            //colWinkelkar.ImageLayout = DataGridViewImageCellLayout.Zoom;
            //gridBestelling.Columns.Add(colWinkelkar);

            foreach (DataRow r in Variabelen.dsGerechten.Tables["Gerechten"].Rows)
            {
                byte[] foto = null;
                using (MemoryStream ms = new MemoryStream())
                {
                    Image img = Image.FromFile(Application.StartupPath +
                    "/fotos/" + r["foto"].ToString());
                    img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                    foto = ms.ToArray();
                }
                r["afbeelding"] = foto;
                if (r["aantal"] == DBNull.Value) r["Aantal"] = 0;
            }
        }
        

        private void txtidKlant_TextChanged(object sender, EventArgs e)
        {
            if (txtidKlant.Text != "")
            {
                try
                {
                    idKlant = int.Parse(txtidKlant.Text);
                    DataRow[] r = Variabelen.dsKlanten.Tables["Klanten"].Select(
                    "idKlant='" + idKlant + "'");
                    lblKlantNaam.Text = r[0]["naam"].ToString();
                }
                catch
                {
                    MessageBox.Show("Gelieve een correct klantnummer op te geven"); 
                }
            }
        }

        private void gridBestelling_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            switch (gridBestelling.Columns[gridBestelling.CurrentCell.ColumnIndex].DataPropertyName.ToLower())
            {
                case "afbeelding":
                    Afbeelding frmAfbeelding = new Afbeelding(gridBestelling["foto", gridBestelling.CurrentCell.RowIndex].Value.ToString());
                    frmAfbeelding.ShowDialog();
                    break;
                case "aantal":
                    int idGerecht = (int)gridBestelling["idGerecht", gridBestelling.CurrentCell.RowIndex].Value;
                    DataRow[] r = Variabelen.dsGerechten.Tables["Gerechten"].Select("idGerecht='" + idGerecht + "'");
                [COLOR="Red"]    [B]int aantal = (int)r[0]["Aantal"];[/B][/COLOR]
                    AantalIngeven frmNummer = new AantalIngeven((int)r[0]["Aantal"]);
                    r[0]["Aantal"] = frmNummer.Aantal;
                    frmNummer.ShowDialog();
                    break;
            }
            gridBestelling.Refresh();
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            Variabelen.winkelkar = new Winkelkar();
            Variabelen.winkelkar.IdKlant = idKlant;

            if (idKlant == 0)
            {
                MessageBox.Show("Gelieve een geldig klantnummer in te geven");
            }
            else
            {
                Variabelen.winkelkar.DsInhoud = Variabelen.dsGerechten.Clone();

                //foreach (DataRow r in Variabelen.dsGerechten.Tables["Gerechten"].Rows)
                //{
                //    if ((int)r["Aantal"] > 0)
                //    {
                //        Variabelen.winkelkar.Aantal += (int)r["Aantal"];
                //        Variabelen.winkelkar.Prijs += (float)((int)r["Aantal"]) * (float)((decimal)r["prijspereenheid"]);
                //        Variabelen.winkelkar.DsInhoud.Tables["Gerechten"]
                //           .Rows.Add(r.ItemArray);//gegevens kopiëren
                //    }
                //}
                Variabelen.FormulierTonen(new Kassa());
            }
           
        }
    }

Bavo aka Joske

Legacy Member
Zoals ik zei, je hebt het aangegeven als String kolom (TextBox), dus moet je de waarde eruit parsen naar integer

Krueger

Legacy Member
Wat is eigenlijk juist die "Variabelen", ik zie daar gelijk nergens een declaratie van.

Wat bavo bedoelt is dat als je een string naar integer wil converteren, je vb moet schrijven:
String t = "t";
int i = Convert.ToInt32(t);
De manier dat jij het doet kan enkel als je variabele al een nummer-tupe is, zoals vb long, double, ...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan