kolorowanie komurki DataGRIDView

0

Witam mam taki problem otóż potrzebne mi jest zdarzenie gdy user zmieni wartosc w ktorej z komórek DGV to zmiemona komurka ma sie sie zakolorować na dowolny kolor dodam ze dane w DGV sa pobierane z bazy danych, sa jakies sugestie ????

0

Tzn nie wiesz jak dostać się do właściwości datagridview odpowiadających za kolor komórki?

dataGridView1.Rows[nrwiersza].Cells[nkomorki].Style

o to chodzi?

0

nie mam problemu z kolorowaniem;p tylko z wychwyceniem faktu zmiany wartosci danej komurki tzn wygladac by to powinno tak pseudokodem:
if uzytkownik zmienia dane w komurce then kolor zmienionej komurki = jakis tam
teraz jak zarejestrowac zmiane wartosci w komurce i dodatkowo okreslenie pozycji zminionej komurki

0

no to w czym problem, przecieŻ odpowiedziales sobie sam na to pytanie.

klient klika w komorke, zapisujesz wartosc do jakiejs tymczasowej zmiennej, a na koncu porownujesz ta tymczasowa zmienna do tego co aktualnie jest w komorce.. jak jest to samo to nic nie robisz, a jak sie vartosi roznia to zmieniasz kolor komorki.

0

mamy dostepne zdarzenie "zmiana wartosci komorki"

        private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if(enabled)
            dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.Black;
        }

enabled ustawisz na true dopiero jak zaladujesz datagridview wartosciami podstawowymi. (Nie wiem w jaki sposob to robisz, ale jesli przepisujesz wartosci do datagrid jakąś pętla to zapewne będzie zmieniało kolor komórek, poniewaz wartosc została zmieniona z tej domyslnej). Albo jeszcze inaczej, dołączyc do datagridview zdarzenie dopiero w odpowiednim momencie.

Pokombinuj, ja nie mam przed oczami Twojego kodu :)

0

i cos w ten desen ale wartosci do dgv ładowane sa z sqla:

void load_of()
        {
            System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(conn);
            con.Open();



            string load = "SELECT * FROM wycena ";

            DataSet dt_load = new DataSet();
            OleDbDataAdapter sda = new OleDbDataAdapter(load, con);

            sda.Fill(dt_load, "wycena");
            this.dgvO.DataSource = dt_load;
            this.dgvO.DataMember = "wycena";
            con.Close();
            dgvO.Columns[1].Width = 300;

            dgvO.Columns[2].CellTemplate.Style.BackColor = Color.Green;
        }

podpowiedz kolegi hideyoshi jest dosc prosta ale tak jak wspomnialem jak wyodrebnic fakt ze user klika na dana komurke w tym momencie w sumie na komurke zdanej kolumny bo tylko o jedna kolumne chodzi wtym wypadku 8

0

ale czym jest ten enabled ogólnie? bo cos takigo sie kompiluje

private void dgvO_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (Enabled==true)
                dgvO.Rows[e.RowIndex].Cells[8].Style.BackColor = Color.Black;
        }

ale nie dziala

0

jak widać z kontekstu: zmianna typu bool.
if(enabled) jest rownowazne if(enabled==true)

ekhm...
po kolei. Używasz wersji z IF więc:
...wiec dołącz Od razu ręcznie zdarzenie do kontrolki datagridview. (taki piorun obok właściwości w designerze)

jezeli wersję bez if, to musisz dołączyc zdarzenie w kodzie w odpowiednim momencie

0

no wlasnie w odpowiednim momencie tzn?

0

po wczytaniu danych do datagridview, ja podałem tylko prosty przykład jak to zrobiłem.
zobacz post wyżej(edytowałem)

0

private void dgvO_CellContentClick(object sender, DataGridViewCellEventArgs e)
{

         dgvO.Rows[e.RowIndex].Cells[5].Style.BackColor = Color.Red;
    }

cos takiego zrobilemale nie dokonca to bo to dziala przy klikneciu a nie zmianie

0

poniewaz ustawiles zdarzenie klikniecie "CellContentClick"
zamiast cellvalue changed.

zdarzenia dodaje sie tak na przyklad

void load_of()
        {
            System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(conn);
            con.Open();



            string load = "SELECT * FROM wycena ";

            DataSet dt_load = new DataSet();
            OleDbDataAdapter sda = new OleDbDataAdapter(load, con);

            sda.Fill(dt_load, "wycena");
            this.dgvO.DataSource = dt_load;
            this.dgvO.DataMember = "wycena";
            con.Close();
            dgvO.Columns[1].Width = 300;

            dgvO.Columns[2].CellTemplate.Style.BackColor = Color.Green;
        
            dvgO.CellValueChanged+=new DataGridViewCellEventHandler(dvgO_CellValueChanged);
}
private void dgvO_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
           
                dgvO.Rows[e.RowIndex].Cells[5].Style.BackColor = Color.Red;
        }

nie kompilowałem tego, ale jakos tak powinno wygladac

0

chociaz tutaj mozna by stworzyc tablice gdzie zapisywalo by mi wartosc dla danej wsuplzednej moge dodac przycisk ktory by poruwnywal pierwotne wsp z z faktycznymi bo idea jest taka zeby przy wydruku tego dgv zaznaczyc zmienione pola, wiec to sprawdzanie mozna by dac przed wydrukiem ale chcialbym bardziej optymalne rozwiazanie bo to bedzie wymagalo tablicy jednowymiarowej na okolo 1000 el

0

ok ale ta opcja nie dziala wstawienie tego voida nic nie zmieia;/

0

ok sory działa po dodaniu zdarzenia w desinger dzieki wielkie za pomoc:) up prawie koloruje sie po zmianach ale kolorwanie ma dotyczyc zmian tylko w piatek kol, a teraz jesli zminie cos w 3 to w tym wierszu i zmienia sie kolor 8 :/

0

musiałeś coś innego zepsuć wyslij mi projekt to Ci to poprawie

0

dobra mam tak :

 private void dgvO_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 5)
            {
                dgvO.Rows[e.RowIndex].Cells[5].Style.BackColor = Color.Red;
            }
        }

i jest ok, dzieki za pomoc:)

0

Ok:)
pozdr

1 użytkowników online, w tym zalogowanych: 0, gości: 1