Diskuze:

C# .NET .NET (C# a Visual Basic) American English version English version

Aktivity (1)
Avatar
95pavel
Člen
Avatar
95pavel:31.5.2013 12:43

Čau, potřebuji udělat tabulku (dataGridView). Uživatel zadává počet řádků a sloupců, a podle toho se vytvoří tabulka(+1 sloupec v kterém je výsledek a nedá se do něj zapisovat). První tři sloupce sčítám a jejich výsledek ukládám do posledního sloupce.

Ale abych přešel k problému... V prvním řádku je vše v pořádku, ale dalších X řádků mi už nevypisuje výsledek.

Kód:

int sloupce = Convert.ToInt16(pocetSloupcu.Text);
int radek = Convert.ToInt16(pocetRadku.Text);

tabulka.ColumnCount = sloupce + 1;
tabulka.RowCount = radek;



double[] poleHodnotA = new double[sloupce];
double[] poleHodnotB = new double[sloupce];
double[] poleHodnotC = new double[sloupce];


foreach(int i in poleHodnotA)
{

    poleHodnotA[i] = Convert.ToDouble(tabulka.Rows[i].Cells[i].Value);
    poleHodnotB[i] = Convert.ToDouble(tabulka.Rows[i].Cells[i + 1].Value);
    poleHodnotC[i] = Convert.ToDouble(tabulka.Rows[i].Cells[i + 2].Value);

    tabulka.Rows[i].Cells[sloupce].Value = poleHodnotA[i] + poleHodnotB[i] + poleHodnotC[i];


    tabulka.Columns[sloupce].ReadOnly=true;
}

Předem díky jestli někdo najdete chybu. :)

 
Odpovědět 31.5.2013 12:43
Avatar
Kit
Redaktor
Avatar
Odpovídá na 95pavel
Kit:31.5.2013 12:50

Procházíš pole jako seznam. V proměnné i se kupodivu nebude nacházet index do pole, ale hodnoty, které se na jednotlivých pozicích nachází. Tedy zřejmě nuly. Všechno tedy sázíš do první položky pole.

Nahoru Odpovědět 31.5.2013 12:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
matesax:31.5.2013 14:26

Tak to nechceš... :)

double[][] allValues;
int rows, collumns;

try
{
    rows = int.Parse(pocetRadku.Text);
    collumns = int.Parse(pocetSloupcu.Text);

    allValues = new double[rows][];
}
catch
{
    práce s výjimkou
}

...

    for(int x = 0; x < rows; x++)
        for(int y = 0; y < collumns; y++)
        {
            ...
        }

Nemám rád takovéto konstrukce - ale když neznám celek, těžko to vymyslet jinak...

Editováno 31.5.2013 14:27
 
Nahoru Odpovědět 31.5.2013 14:26
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:31.5.2013 14:49

V Javě si nechávám editorem generovat blok catch takto:

} catch (Exception e) {
    e.printStackTrace();
}

Nestane se mi pak, že bych nějakou výjimku zapomněl ošetřit. Pokud ji potřebuji ošetřit jinak, tak to prostě přepíšu.

Existuje něco podobného jako e.printStackTrace() i pro C#?

Nahoru Odpovědět 31.5.2013 14:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
matesax:31.5.2013 15:07

Exception:

http://msdn.microsoft.com/…ception.aspx

Z ní lze dostat informace o typu, umístění atd. Viz.:

http://msdn.microsoft.com/…ception.aspx

Jen nechápu, proč se nedá posílat přímo - něco jako zdědit a přidat...

Editováno 31.5.2013 15:09
 
Nahoru Odpovědět 31.5.2013 15:07
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:31.5.2013 15:17

Myslel jsem něco zjednodušujícího. Pokud v Javě ten e.printStackTrace() nechám bez jakékoli změny přesně tak, jak mi to editor vygeneroval, bude mi to fungovat naprosto perfektně. Nic dalšího už nemusím přidávat, žádnou deklaraci, nic.

Samozřejmě pokud chci výjimku ošetřit jinak, musím udělat změnu.

Nahoru Odpovědět 31.5.2013 15:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.5.2013 15:22

Tak si uprav template... :)

 
Nahoru Odpovědět 31.5.2013 15:22
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:31.5.2013 15:26

Právě proto se tě ptám, jak by sis upravil template pro C#.

V Javě to mám vyřešené. e.printStackTrace() jsem tam chtěl a proto jsem si ho do toho template dal. Rozhodně je to lepší, než pitomý string "práce s výjimkou". Myslím si, že by sis měl upravit template, protože taková hovadina, která ani není syntakticky správně, tam nepatří.

Nahoru Odpovědět 31.5.2013 15:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.5.2013 15:31

sis - já? :) (.NET již nemám)

Každopádně co máš za IDE? VS?

http://www.codeproject.com/…ation-Templa

 
Nahoru Odpovědět 31.5.2013 15:31
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:31.5.2013 15:33

Používám Vim s vlastními pluginy.

Nahoru Odpovědět 31.5.2013 15:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.5.2013 15:36

Tak to neporadím... :)

 
Nahoru Odpovědět 31.5.2013 15:36
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:31.5.2013 15:39

Ale to nemá s pluginy nic společného. Ptal jsem se tě, jak bys univerzálním způsobem ošetřil výjimku v C#. Napsal jsem ti, jak to dělám v Javě a zajímá mě, jak se to dělá v C#.

Neptal jsem se, jak se upravuje template, ale co by sis do něho dal.

Editováno 31.5.2013 15:41
Nahoru Odpovědět 31.5.2013 15:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.5.2013 15:42

Však jsem poslal Exception a jak z něj dostat konkrétní výjimku. A to si musíš dát ke generaci...

Editováno 31.5.2013 15:45
 
Nahoru Odpovědět 31.5.2013 15:42
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:31.5.2013 15:50

Konkrétní výjimku mi přece dodá překladač, ne? Aha, to umí jen Java.

Tak ještě jednou: Jak v C# univerzálním způsobem ošetříš výjimku vypsáním zásobníku na chybovou konzoli? Nepotřebuji kus kódu na 10 řádek. Chci jeden řádek, který umístím do bloku catch a nic víc. Žádné další deklarace. Prostě analogicky jako v Javě funguje e.printStackTra­ce().

Nahoru Odpovědět 31.5.2013 15:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Kit
matesax:31.5.2013 15:54

Aha...

http://msdn.microsoft.com/…cktrace.aspx

This is it? :)

catch (Exception e)
{
    Console.WriteLine(e.StackTrace);
}
Editováno 31.5.2013 15:55
 
Nahoru Odpovědět 31.5.2013 15:54
Avatar
Kit
Redaktor
Avatar
Odpovídá na matesax
Kit:31.5.2013 16:06

No vida, je to docela podobné. Jenom to vypisuje na výstupní konzoli místo na chybovou. Takže po úpravě se konečně dostanu k požadovanému

catch (Exception e)
{
    Console.Error.WriteLine(e.StackTrace);
}

Kdybys to napsal místo původního

catch
{
    práce s výjimkou
}

bylo by to přímo skvělé.

Nahoru Odpovědět 31.5.2013 16:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.