» »

[ASP.NET] Prenos podatkov iz ene spletne strani v drugo

[ASP.NET] Prenos podatkov iz ene spletne strani v drugo

Cvenemir ::

Lp.

Ustvarjene imam dve spletne strani. Probleme mi dela prenos podatkov direktno iz strani2(textboxi, itd..) na stran1 v kontrolo GridView, in sicer bi rad imel podatke razvrščene po stolpcih.

Poskusil sem na sledeč način:

protected void Button1_Click(object sender, EventArgs e)
        {
            //Ustvarimo podatkovno tabelo
            DataTable table = new DataTable();
            
            //Ustvarimo stolpce
            table.Columns.Add("ID izposoje", typeof(string));
            table.Columns.Add("Ime", typeof(string));
            table.Columns.Add("Priimek", typeof(string));
            table.Columns.Add("Datum izposoje", typeof(DateTime));
            table.Columns.Add("Datum vrnitve", typeof(DateTime));
            table.Columns.Add("Tip vozila", typeof(string));

            //Dodamo vrstico s podatki
            table.Rows.Add(TextBox3.Text, TextBox1.Text, TextBox2.Text, Calendar1.SelectedDate.ToString(), Calendar2.SelectedDate.ToString(), ListBox1.SelectedItem.Text);

            //Ponovno odpremo začetno stran, kjer se nahaja seznam
            Response.Redirect("~/Default.aspx");
        }


Če prav razumem, mi bo to za vsakič ko kliknem gumb ustvarilo novo tabelo, torej bo v tabeli vedno samo ena vrstica.

- Kam naj premaknem kodo pred dodajanjem vrstice, da bo klic te metode ustvaril samo novo vrstico z novimi podatki?
- Kje določim "GridView1.DataSource = table;" in na kak način?

KrEn1234 ::

Podatke moraš shraniti na lokacijo, ki je dosegljiva iz obeh strani. Na strani, ki ima DataGrid nato preprosto ponovno prebereš vse podatke.

carota ::

Nisem prepričan, da veš kaj počneš. ;) Naredil si spremenljivko "table" ji priredil vrednosti in potem naredil redirect, ki ti vse to zavrže in prikaže stran Default (ki ni dobila nobenih podatkov). Če hočeš imeti na slednji strani podatke, jih moraš tja poslati, npr. preko QueryStringa, ali jih spraviš v Session, ali zapišeš v bazo, ali ... in potem na strani Default prebereš kaj si shranil in jih bindaš v GridView.

Cvenemir ::

Sem se malo drugače lotu zadeve, in sicer poskušam rešit zadevo s pomočjo Session/DataTable.
Na strani1 imam metodo UstvariTabelo, ki jo potem kličem takole:
protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataTable myDt = new DataTable();
                myDt = UstvariTabelo();
                Session["tabela"] = myDt;

                this.GridView1.DataSource = ((DataTable)Session["tabela"]).DefaultView;
                this.GridView1.DataBind();
            }
        }


Na strani2 pa to tabelo napolnim s podatki takole:
private void DodajPodatke(string id, string ime, string priimek, string datum1, string datum2, string vrsta, DataTable tabela)
        {
            DataRow vrstica = tabela.NewRow();

            vrstica["ID"] = TextBox3.Text;
            vrstica["Ime"] = TextBox1.Text;
            vrstica["Priimek"] = TextBox2.Text;
            vrstica["Datum izposoje"] = Calendar1.SelectedDate.ToString();
            vrstica["Datum vrnitve"] = Calendar2.SelectedDate.ToString();
            vrstica["Vrsta avtomobila"] = ListBox1.SelectedValue.ToString();

            tabela.Rows.Add(vrstica);
        }


Ob kliku na Button1, kličem to metodo, ampak mi vedno vrže exception "Object reference not set to an instance of an object." v vrstici "DataRow vrstica = tabela.NewRow();"

protected void Button1_Click(object sender, EventArgs e)
{
DodajPodatke(this.TextBox3.Text, this.TextBox1.Text, this.TextBox2.Text,
this.Calendar1.SelectedDate.ToString(), this.Calendar2.SelectedDate.ToString(),
this.ListBox1.SelectedValue.ToString(), (DataTable)Session["tabela"]);

Response.Redirect("Default.aspx");
}

V čem je problem?

vorantz ::

zakaj maš sploh ločeni strani za to?
se mi zdi, da ne štekaš ravno point postbacka

Cvenemir ::

Ločeno mam zato ker so taka navodila :)

Izdelajte Asp.Net Web Forms aplikacijo za vodenje poljubne evidence (knjižnica, izposoja avtomobilov, študentski boni, ...). Glavna spletna stran mora vsebovati seznam, ki prikazuje vse zapise. Za dodajanje novega zapisa se mora odpreti nova spletna stran, kjer vpišemo potrebne podatke. Pri tem uporabite čim več različnih gradnikov, a najmanj 3. Implementirajte tudi brisanje zapisov iz seznama.

Trajno shranjevanje seznama ni potrebno podpreti. Poleg delovanja se ocenjuje tudi arhitektura programa! Poskrbite za pravilen vnos podatkov.

carota ::

Kaj če bi si na papir najprej napisal kaj in kako hočeš to naredit ter razdelal logiko na najmanjše kose? Tukaj sprašuješ take osnovne stvari, ki so obdelane na začetku vsakega ASP.NET tutoriala. Sej ne da ne bi želel pomagat, a tudi tako da te vodimo za rokico korak za korakom, ne bomo nikamor prišli.

Glede na zahteve ti predlagam da:
- v Global.asax ko se zažene Session, da narediš svojo "tabelo" in prirediš Session objektu, da jo boš imel potem vedno dosegljivo; Lepo bi bilo, da jo še ob Session End disposaš.
- na prvi strani prikažeš grid iz tabele shranjene v Session-u (to približno imaš, a bi lahko lepše naredil)
- na drugi strani dodajaš vrstice v tabelo v Session-u (tukaj od nekje privlečeš tabelo po nepotrebnem)
- na prvi strani, v gridu narediš gumb, ki ti bo iz tabele izbrisal vrstico in stran ponovno narisal. Za to boš moral prestavit bindanje tabele na grid v posebno funkcijo, da boš lažje klical

Just my opinion. Gud lak. :)

vorantz ::

tvoj problem je s shranjevanjem podatkov
glede na to da premetavaš okoli ta datatable se mi zdi, da ne uporabljaš vsaj nekega osvnovnega .mdf za podatke?

če maš bazo bi enostavno na prvi strani povleku podatke iz nje
na drugi pa pol sperminjal

in se ne bi blo treba s tem jajcat
upam nekako, da ni že v navodilih rečeno, da premetavaj datatable v seji :|

Cvenemir ::

Nimam nobene baze. Js pač vnesem podatke na strani2 v textboxe itd...In pol ko kliknem potrdi bi se naj naložla prva stran s tem vnosom na seznamu. DataTable pa uporablam zato, ker lahk lepo po stolpcih razporedim podatke, in jo pol uporabim kot DataSource za GridView. Sam nekak mi ne rata spravit tabele z strani2 na stran1.

vorantz ::

Sej to me zanima zakaj nimaš baze (datatable lahko filaš tudi iz baze)

Rahlo dvomim, da še niste jemali tega?

Cvenemir ::

Nismo še nič z bazami delal. Tak da je tukaj ne morem uporabit.

vorantz ::

pol pa naredi kar je predlagal carota

smash ::

ena od opcije je tud transfer..to je da na drugi strani vidiš objekte iz preve...nisem še nikol rabil, vendar obstaja in si preberi, mogoče ti pa koristi ta opcija

carota ::

Ideja s tabelo v Sessionu je popolnoma primerna nalogi, ker ti je ni treba trajno shranjevat in jo imaš enostavno na dosegljivo ter vedno čisto.

@Cvenemir, na strani 2, ko klikneš gumb, dodaj tabeli iz Session-a vrstico s podatki in shrani nazaj v Session. Potem redirectaš nazaj na prvo stran in iz napolneš Grid.

@Smash, Server.Transfer() (al kaj že je) ima drugačne namene kot to kar želi doseči.

Cvenemir ::

Hvala za pomoč. Problem rešen :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[VB] datagridview

Oddelek: Programiranje
351933 (1316) korenje3
»

[Visual C#] kako narediti vrstice?

Oddelek: Programiranje
91700 (1182) dbeong
»

[Visual C#] TableAdapter

Oddelek: Programiranje
61130 (1006) detroit
»

[ASP.NET]

Oddelek: Programiranje
61320 (1174) OmegaM
»

Asp.NET Dodajanje TextBox-ov?

Oddelek: Programiranje
121456 (1305) Mediator

Več podobnih tem