Diskuze:

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

Avatar
95pavel
Člen
Avatar
95pavel:

Č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:

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:

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:

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:

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:

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:

Tak si uprav template... :)

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

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:

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:

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:

Tak to neporadím... :)

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

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:

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:

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:

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:

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.