Kingsley
(Tudor)
aprilie 18, 2018, 2:51pm
1
Am creat un dataGridView în care afișez meniul unui restaurant. Datele le încarc automat din baza de date. Pe lângă coloanele din baza de date am mai adăugat 2 coloane (coloana Cantitate și Adaugă)
Problema este că nu pot scrie în căsuța Cantitate.
Plus, am încercat să inițializez valoarea pe coloana Cantitate de pe fiecare rând cu 1 și nu am reușit.
int value = 1;
for (int i = 1; i <= dataGridView1.SelectedRows.Count; i++)
dataGridView1.Rows[i].Cells[6].Value = value;
mrapi
(mrapi)
aprilie 18, 2018, 3:03pm
2
Eu as scrie in sursa de date la care este legat controlul (datatable),nu in control.
1 Like
Kingsley
(Tudor)
aprilie 18, 2018, 3:05pm
3
Eu nu am in tabela, coloana Cantitate. E adaugata doar in dataGridView.
mrapi
(mrapi)
aprilie 18, 2018, 3:06pm
4
cum ai conectat gridul la sura de date?poti pune ceva cod
1 Like
Kingsley
(Tudor)
aprilie 18, 2018, 3:06pm
5
N-am scris linie de cod
Conectarea e făcuă direct din setările dataGridView-ului.
mrapi
(mrapi)
aprilie 18, 2018, 3:12pm
8
Eu as face prin cod,un sql in care aduci si campul cantiatate cu o valoare default, il legi apoi la grid (il scrii in coloana DataPropertyName)
uite si putin cod,am creat un datatable,tu vei face o interogare SQL si inlocuiesti codul marcat cu temporar,apoi am parcurs acel datatable si am schimbat cantitatea din 1 in 2,gridul l-am legat din cod la sursa : dataGridView1.DataSource = dt;
private void Form1_Load(object sender, EventArgs e)
{
//temporar
var dt =new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("denumire", typeof(string));
dt.Columns.Add("cantitate", typeof(string));
var row =dt.NewRow();
row["id"] = 1;
row["denumire"] = "Atricol 1";
row["cantitate"] = 1;
dt.Rows.Add(row);
row = dt.NewRow();
row["id"] = 2;
row["denumire"] = "Atricol 2";
row["cantitate"] = 1;
dt.Rows.Add(row);
//end temporar
foreach (DataRow r in dt.Rows)
{
r["cantitate"] = 2;
}
dataGridView1.DataSource = dt;
}
2 Likes
Porneste cu for ul de la 0 pana la dataGridView1.SelectedRows.Count
for(int i = 0; i< dataGridView1.SelectedRows.Count; i++)
Tu incepi for ul de la 1, dar datagridul inecepe de la 0
sai poti sa modifici la indexul coloaneo cu 7
Este a 7 coloana din grid
Vezi daca merge
In c#, java, c, c++ index ul incepe de la 0
2 Likes
Kingsley
(Tudor)
aprilie 18, 2018, 7:01pm
10
N-a mers.
Însă a funcționat ideea lui @mrapi cu creatul câmpului în baza de date.
Mersi tuturor de ajutor!
Însă încă ceva. Ce funcție este apelată atunci când apăs pe butonul Adaugă? Și cum pot lua valoarea unei anumite coloane pe un anumit rând. Spre exemplu cum aflu care este prețul produsului cu id 5?
1 Like
Faci linq pe dt:
Ceva de genul
var results = from myRow in dt.AsEnumerable()
where myRow.Field(“id”) == 5
select myRow;
Kingsley
(Tudor)
aprilie 18, 2018, 7:31pm
12
Și ce funcție e apelată când apăs butonul Adauga?
mihaionescu
(Ionescu Mihai)
aprilie 18, 2018, 8:49pm
13
Pe grid ai un event CellClick, iar acolo faci un if daca coloana e cea cu butonul si atunci apelezi functia de “Adauga”.
Kingsley
(Tudor)
aprilie 18, 2018, 9:20pm
14
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
var senderGrid = (DataGridView)sender;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
MessageBox.Show("M-ai apasat!", " ", MessageBoxButtons.OK);
}
Am încercat asta și nu merge.
mrapi
(mrapi)
aprilie 19, 2018, 5:13am
15
Campul nu trebuie neaparat in baza de date,poti sa-l pui in interogarea SQL
SELECT ID,... 1 AS CANTITATE,....FROM...
fara LINQ poti gasi un articol
dt.DefalutView="ID"
var idx = dt.DefalutView.Find(5);
if (idx ==1){
//negasit
}else{
// dt.DefalutView[idx]["PRET"]
}
Kingsley
(Tudor)
aprilie 19, 2018, 5:26am
16
ok ok am inteles, dar poti sa-mi spui te rog de ce nu merge butonul Adauga? Ti-am dat si codul cu ce se intampla cand il apelez (uita-te mai sus putin)
Kingsley
(Tudor)
aprilie 19, 2018, 5:34am
17
Am rezolvat. Trebuia si butonul sa aiba o coloana in db.
Kingsley
(Tudor)
aprilie 19, 2018, 8:30am
18
Inca ceva. Cand eu incarc datele din tabela, cum le pot filtra. Gen, vreau sa extrag doar randurile ce au la campul id_client, valoarea 6?
daca vrei cu sql
select * from tabel t where t.id_client = 6
Ti-as sugera sa citesti un tutorial de sql si sa folosesti debugger-ul din Visual Studio
Kingsley
(Tudor)
aprilie 19, 2018, 8:46am
20
stiu sa scriu query-ul, dar unde il scriu?