Diskuze: datagridview font color
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 25 zpráv z 25.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nejsem si úplně jistý, ale podle mě hodnota
string s = LISTpriorita[0];
bude vždycky "a1" ne?
Podle toho tvého kódu mi přijde, že vždycky při projití řádku DGV přidáš do listu hodnotu té "priority", ale pak se v tom listu odkazuješ stále na první index. Nemělo by tam místo té nuly být číslo řádku DGV nebo číslo řádku - 1?
No tiež som už nad tým premýšľal, ale nie som si istý ako to korektne urobiť. Nad MySql chcem nasadiť trigger aby mi zobrazovalo stále posledných 50 riadkov. Možno niečo také?
for(int i = 0; i < 49; i++)
string s = LISTpriorita[i];
alebo si spočítam riadky v DGV a hodím to do cyklu
int pocetDGV = dataGridView1.Rows.Count;
for(int i = 0; i < pocetDGV; i++)
string s = LISTpriorita[i];
No tak som to skúsil, ale nefunguje mi to hlási mi chybu v
string s = LISTpriorita[i];
takže asi robím zle zápis ... privítam každú radu
a takhle?
string s = LISTpriorita[i].ToString();
Zkus si vypsat, co vlastně v tom listu máš. Pokud je to jen na výběr té "priority", myslím, že by bylo jednodušší ten list vynechat úplně a rovnou se odkazovat na hodnotu toho sloupce "priorita v DGV...
no ja v DGV stĺpec priorita nemám, je len v MySql ... skúšal som to aj bez listu ale tiež mi to nefungovalo, ale možno som to robil zle ... ako sa viem porovnávať všetky riadky medzi DGV a MySql bez listu?
string s = LISTpriorita[i];
podle mě může nefungovat pouze z jednoho důvodu, že index i překročí rozsah LISTpriorita
prekročiť rozsah určite nemôže, pretože keď použijem tento zápis
int pocetDGV = dataGridView1.Rows.Count;
for(int i = 0; i < pocetDGV; i++)
string s = LISTpriorita[i];
tak početDGV je taký istý ako počet v MySql a LISTpriorita si ukladá celý počet riadokov z MySql, takže počty sedia určite.
Ukaž prosím ještě tu část s naplněním těch sloupců, včetně opravy. Jsem sice začátečník (k MySQl jsem se ještě nedostal), ale nějak v uvedeném kódu nechápu smysl toho Listu LISTpriorita.
protože tady nevidím jeho plnění:
int pocetDGV = dataGridView1.Rows.Count;
for(int i = 0; i < pocetDGV; i++)
string s = LISTpriorita[i];
podle mě, pokud hodnota, kterou hodíš do listu bude null, tak průser..
aha tak to ma nenapadlo ... určite tam mám zopár riadkov ktoré budú null. Zajtra idem robiť nový server tak to vyskúšam na čisto .. dám vedieť či to funguje
Ešte otázka ako by sa to dalo urobiť bez použitia LISTu??
Co vlastně se ti zobrazuje v tom DGV?
Jak jsem psal, moc nevím co ten kód dělá, ale protože jsi ten list, kromě přidání položek nepoužil, čekal bych něco takového:
const string a1 = "Obyčajná správa";
const string a2 = "Stredne dôležitá";
const string a3 = "Veľmi dôležitá";
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
using (MySqlConnection cnn = new MySqlConnection("Server=&&&;Database=OitDB;Uid=martin;Pwd=;"))
{
MySqlDataAdapter da = new MySqlDataAdapter("SELECT priorita FROM nrp", cnn);
DataSet ds = new DataSet();
da.Fill(ds, "nrp");
foreach (DataRow row in ds.Tables["nrp"].Rows)
{
string s = row["priorita"].ToString();
if (s == null) s = string.Empty;
DataGridViewRow row1 = dataGridView1.Rows[e.RowIndex];
row1.DefaultCellStyle.BackColor = Color.White;
switch(s)
{
case a1: row1.DefaultCellStyle.ForeColor = Color.Black; break;
case a2: row1.DefaultCellStyle.ForeColor = Color.Blue; break;
case a3: row1.DefaultCellStyle.ForeColor = Color.Red; break;
default: row1.DefaultCellStyle.ForeColor = Color.DarkSeaGreen; break;
}
}
}
dataGridView1.ColumnHeadersVisible = false;
dataGridView1.EnableHeadersVisualStyles = false;
}
}
tak som to skúsil, ale všetky riadky sú ako default takže darkSeaGreen, no chcem to ešte skúsiť cez MySqlDataReader
ešte pridávam zovšeobecnený obrázok pre lepšiu predstavu. Col1,col2,col3 sa zobrazí v DGV a col8 je "priorita" kde môže byť uložený len jeden z 3 reťazcov a1,a2,a3
A když uděláš
int pocetDGV = dataGridView1.Rows.Count;
for(int i = 0; i < pocetDGV; i++)
{
if(DGV.SelectedCells[cislosloupce].value = "a1"
{
DGV.Row[i].DefaultCellStyle.BackColor = Color.White;
DGV.Row[i].DefaultCellStyle.ForeColor = Color.Black;
}
}
?
ja v DGV nemám stĺpec priorita takže takto to nepôjde
if(DGV.SelectedCells[cislosloupce].value = "a1"
prípadne viem si do DGV načítať aj tento stĺpec (takže načítam 4) ale nezobraziť ho?(zobrazené budú 3)
Tak si ho tam načti, ale dej mu visible = false;
do dgv načítavam dáta takto:
using (MySqlDataAdapter sqlDa = new MySqlDataAdapter("select pc,sprava,datum from nrp", myConnection))
{
DataTable dt = new DataTable();
sqlDa.Fill(dt);
dataGridView1.DataSource = null;
dataGridView1.DataSource = dt;
this.dataGridView1.Refresh();
dataGridView1.Columns[0].Width = 100;
dataGridView1.Columns[1].Width = 270;
dataGridView1.Columns[2].Width = 100;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.RowCount - 1;
viem pridať a skryť 4 stĺpec takto:
using (MySqlDataAdapter sqlDa = new MySqlDataAdapter("select pc,sprava,datum,priorita from nrp", myConnection))
{
DataTable dt = new DataTable();
sqlDa.Fill(dt);
dataGridView1.DataSource = null;
dataGridView1.DataSource = dt;
this.dataGridView1.Refresh();
dataGridView1.Columns[0].Width = 100;
dataGridView1.Columns[1].Width = 270;
dataGridView1.Columns[2].Width = 100;
dataGridView1.Columns[3].Visible = false;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.RowCount - 1;
No, a když už ho tam máš, můžeš zkusit to, co jsem ti radil...
EDIT: jen trošku nechápu, proč tam máš to
dataGridView1.DataSource = null;
dataGridView1.DataSource = dt;
když je všechno default, tak nejspíš špatně načítáš databázi. Jak pracovat MySql ti neporadím, protože to ještě neumím. Jen můžu poradit F9, aplikaci krokovat a pozorovat co se děje.
nefunguje to ani tak ... skúsil som si načítať do DGV aj stĺpec priorita a vyberal som priamo z DGV
int rowc = dataGridView1.Rows.Count - 1;
for (int i = 0; i <= rowc; i++)
{
if (dataGridView1.Rows[i].Cells[3].Value.ToString() == a1)
{
for (int z = 0; z <= dataGridView1.ColumnCount - 1; z++)
{
dataGridView1.Rows[i].Cells[z].Style.ForeColor = Color.Black;
}
}
else if (dataGridView1.Rows[i].Cells[3].Value.ToString() == a2)
{
for (int z = 0; z <= dataGridView1.ColumnCount - 1; z++)
{
dataGridView1.Rows[i].Cells[z].Style.ForeColor = Color.Blue;
}
}
else if (dataGridView1.Rows[i].Cells[3].Value.ToString() == a3)
{
for (int z = 0; z <= dataGridView1.ColumnCount - 1; z++)
{
dataGridView1.Rows[i].Cells[z].Style.ForeColor = Color.Red;
}
}
}
no ani tak mi to nefunguje ...
Ještě dotaz, nezkoušíš náhodou nastavovat barvy ještě před tím, než se stihne ten DGV naplnit? Zkus třeba tu proceduru obarvování spustit přes tlačítko až po naplnění DGV, co to udělá?
tak beriem späť tento môj pokus funguje, ale pri prerábaní servera som
si zle nastavil mysql
Takže ak by niekto potreboval, tak toto funguje:
int rowc = dataGridView1.Rows.Count - 1;
for (int i = 0; i <= rowc; i++)
{
if (dataGridView1.Rows[i].Cells[3].Value.ToString() == a1)
{
for (int z = 0; z <= dataGridView1.ColumnCount - 1; z++)
{
dataGridView1.Rows[i].Cells[z].Style.ForeColor = Color.Black;
}
}
else if (dataGridView1.Rows[i].Cells[3].Value.ToString() == a2)
{
for (int z = 0; z <= dataGridView1.ColumnCount - 1; z++)
{
dataGridView1.Rows[i].Cells[z].Style.ForeColor = Color.Blue;
}
}
else if (dataGridView1.Rows[i].Cells[3].Value.ToString() == a3)
{
for (int z = 0; z <= dataGridView1.ColumnCount - 1; z++)
{
dataGridView1.Rows[i].Cells[z].Style.ForeColor = Color.Red;
}
}
}
tak a ešte by ste mi nevedeli pomôcť aj s druhým mojím problémom?
http://www.itnetwork.cz/…68cf0c6d50e8
Zobrazeno 25 zpráv z 25.