» »

c# datagridview in combox

c# datagridview in combox

OmegaM ::

Pozdravljen.

Nekako bi rad spravil podatek iz combobox1 v datagridview1.

In mi nekako ne uspe.

Imam vec stolpcev (4 , recimo: A,B,C,D )in moja koda zgleda nekako takole.

foreach(DataGridView  dgv in dataGridView1.Rows)
{
    dgv.Rows[0].Cells[0].Value = cmbSifrant.SelectedValue.ToString();
}

Vedno se mi zaustavi ze na samem zacetku pri foreach in javi napako Unable to cast object of type 'System.Windows.Forms.DataGridViewRow' to type 'System.Windows.Forms.DataGridView'.

Hvala.
Ni nam lahko, bo pa boljše!!!

kogledom ::

foreach(DataGridView  dgv

zamenjaj z
foreach(DataGridViewRow  dgv 

Mitja Bonča ::

A si siguren da, bi rad vsako vrednsot iz comboBoxa prepisal v celici (0,0) v dataGridView-ju?
Ker: dgv.Rows[0].Cells[0].Value stori prav to - vedno se ti bo vrednost iz comboBoxa prenesla v prvo celico zgoraj levo.

Ali bi jo rad prenesel kam drugam?
Glede tvojega vprašanja ima kogledom prav. DataGridViewRow class je pravi naslov v tvojem primeru.

OmegaM ::

Pozdravljena.

V bistvu bi rad vrednost prenesel iz comboboxa v v datagrid in da, sedaj mi gre po nasvetu lepo mimo.

Zelja pa je vsekakor napisati podatek v tocno doloceno polje, in seveda preverjati ali je polna ozi. enaka vrednost, da grem pisat v naslednjo polje.

Ampak preden pridem do sem bi rad, da mi uspe zapisati vsaj vrednost v stolpec z imenom A, imam pa recimo 4 stolpce.

In recimo uporabim zapim:

dgv.Cells["dtgA"].Value = cmbSifrant.SelectedValue.ToString();


Ampak mi javi napako za NullReference oz.
Object reference not set to an instance of an object.


Pa sem se malo izgubil.

Hvala
Ni nam lahko, bo pa boljše!!!

Mitja Bonča ::

Čakaj malo... ne razumem te najbolje. Ti imaš dgv, ki ima 4 stoplce. Je le ta na začetku prazen, ali za napolniš z kakšnimi podatki?
Nato imaš 1 comboBox (ali jih imaš več?). Iz le tega bi rad prenašal podatke v dgv.

Napisal si: "Zelja pa je vsekakor napisati podatek v tocno doloceno polje, in seveda preverjati ali je polna ozi. enaka vrednost, da grem pisat v naslednjo polje."
V katero določeno polje? Prosim pojasni bolje.

OmegaM ::

Pozdravljen.

Tako je, imam stiri stolpce, A, B, C, D

In prav toliko combobox-ov.

Iz vsakega combobox-a bi rad zapisal podatek v svoj stolpec, v isto vrstico.

In nato, ko bi uspelo v prvo, bi v drugem poizkusu zapisal podatke znova vsak v svoj pripadajoc stolpec, ampak dobil v novi vrstici, stari podatki bi ostalo.

Upam, da sem dovolj jasno napisal.

Hvala.
Ni nam lahko, bo pa boljše!!!

darkolord ::

Tkole, cist na hitrco:

        private struct Test
        {
            public string Prvi { get; set; }
            public string Drugi { get; set; }
        }

        private BindingList<Test> list = new BindingList<Test>();

        private void DodajKnof_Click(object sender, EventArgs e)
        {
            list.Add(new Test {Prvi = comboBox1.Text, Drugi = comboBox2.Text});
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = list;
        }

Zgodovina sprememb…

  • spremenilo: darkolord ()

Mitja Bonča ::

hehe, sem se malce zabaval in izdelal po mojem kar si želiš. Kodo sem full poenostavil, in deluje popolno (sem prav malce ponosen sam nase :)), no kakorkoli, upam da ti bo všeč.
Kaj rabiš: na form daj samo dataGridView in 4 comboBoxe. Ne določaj nobenih parametrov za kontrole. Ne rabiš delati nobenega eventa, vse kar moraš narediti, je copy-paste to kodo v tvoje urejevalnik besedila (samo ime projekta spremeni v tvojega (namespace))!!
To je to:

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

namespace Jan29Exercise2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            PopulatingCombo();
            CreatingDGV();
        }

        private void PopulatingCombo()
        {
            //napolne se comboBox z nekimi vrednostmi:
            string[] array1 = new string[] { "ena", "dva", "tri" };
            string[] array2 = new string[] { "AAA", "BBB", "CCC" };
            string[] array3 = new string[] { "aabb", "ccdd", "eeff" };
            string[] array4 = new string[] { "čšž", "xyz", "-O-", "EUR$&" };
            this.comboBox1.Items.AddRange(array1);
            this.comboBox2.Items.AddRange(array2);
            this.comboBox3.Items.AddRange(array3);
            this.comboBox4.Items.AddRange(array4);

            //naredi se event in določi nekaj parametrov za vse comboBox:
            ComboBox[] cb = new ComboBox[] { comboBox1, comboBox2, comboBox3, comboBox4 };
            for (int i = 0; i < cb.Length; i++)
            {
                cb[i].DropDownStyle = ComboBoxStyle.DropDownList;
                cb[i].Tag = i;
                cb[i].SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
            }
        }

        private void CreatingDGV()
        {
            dataGridView1.Columns.Add("col1", "A");
            dataGridView1.Columns.Add("col2", "B");
            dataGridView1.Columns.Add("col3", "C");
            dataGridView1.Columns.Add("col4", "D");

            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.RowHeadersVisible = false;
            dataGridView1.AutoGenerateColumns = false;
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cb = sender as ComboBox;
            if (cb.SelectedIndex > -1)
            {
                int tag = Convert.ToInt32(cb.Tag); //številka je za eno manjša (štetje se začne z 0 (0-3))
                string item = cb.GetItemText(cb.SelectedItem);
                PassingDataToDGV(tag, item);
            }
        }

        private void PassingDataToDGV(int column, string item)
        {
            bool bInsertion = true;
            int counter = 0;
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                counter++;
                if (String.IsNullOrEmpty(row.Cells[column].FormattedValue.ToString()))
                {
                    dataGridView1[column, row.Index].Value = item;
                    bInsertion = false;
                    break;
                }
            }
            if (bInsertion && counter == dataGridView1.Rows.Count)
            {
                dataGridView1.Rows.Add();
                dataGridView1[column, counter].Value = item;
            }
        }
    }
}


Upam da ti bo všeč.
Mitja

darkolord ::

Si pa zakompliciral :)

Mitja Bonča ::

Ja to je hotu :)

darkolord ::

Kaj pa je s tistim malo višje narobe? :)

Mitja Bonča ::

Ja tvoja koda delje na button click, moja pa na izbor enega comboBoxa (bilo katerega). Nevem če je kaj narobe, videti je uredu. Samo se malo tazlikujeta pač.

OmegaM ::

Oh, obema hvala!

Bom poizkusil.

Jaz drugace delam na button click, pac ko imam vse izbrane, ampak ta ideja na izbor enega izmed comboxa je tudi vredu, bom z obema poizkusil.

Se enkrat hvala!
Ni nam lahko, bo pa boljše!!!

OmegaM ::

Še enkrat hvala obema.

Ta ideja kot jo je naredil mitja pa moram priznat d mi zelo odgovarja :)

Sicer se sam to nekaj trudim, da se naucim, ampak to pa sta stresla ven kot iz ... kot aduta iz rokava :)

Se enkrat hvala.

Upam, da si cim prej kako pivo privosciata :)

Lp, M
Ni nam lahko, bo pa boljše!!!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[VB] datagridview

Oddelek: Programiranje
351940 (1323) korenje3
»

[VB] polepšanje kode

Oddelek: Programiranje
7746 (652) korenje3
»

[C#,SQL]

Oddelek: Programiranje
51242 (1155) JanOlMajti
»

DataView, DataTable, DataSet

Oddelek: Programiranje
91158 (909) detroit
»

[Visual C#] TableAdapter

Oddelek: Programiranje
61134 (1010) detroit

Več podobnih tem