Toon posts:

[C#] DataGrid FooterText

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik krijg het niet voor elkaar om FooterText toe te voegen aan een datagrid als deze al op het scherm getoond word.

De eerste keer dat de DataGrid opgebouwd wordt is het geen probleem:

code:
1
2
3
DataGrid1.DataSource = ds;
DataGrid1.Columns[0].FooterText = "text";
DataGrid1.DataBind();


Maar als ik vervolgens bijvoorbeeld na het drukken op een knop deze tekst wil overschrijven
code:
1
DataGrid1.Columns[0].FooterText = "text2";


dan lukt dit niet.

[ Voor 4% gewijzigd door Verwijderd op 15-10-2003 10:24 ]


Verwijderd

Volgens mij moet je na elke wijziging aan een DataGrid een DataBind() doen.

Verwijderd

Topicstarter
Verwijderd schreef op 15 October 2003 @ 10:24:
Volgens mij moet je na elke wijziging aan een DataGrid een DataBind() doen.
Had ik al geporbeerd jah

code:
1
2
//DataGrid1.Columns[dag + 2].FooterText = vervang;
//DataGrid1.DataBind();


werkt niet helaas

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Die DataBind() moet je iig doen.

Echter, waar ga je die footertext gaan wijzigen? Je zult iig een postback moeten doen geloof ik.

https://fgheysels.github.io/


Verwijderd

Soms zijn de grootste problemen die je zo gemakkelijk over het hoofd ziet...vandaar mijn reactie. Krijg je een foutmelding of geeft hij nog steeds de oude tekst weer? (Waarschijnlijk het laatste, anders kon je gaan zoeken op de foutmelding...)

Verwijderd

Topicstarter
De grid is gevuld met een aantal omschrijvingen met daarachter een aantal waarden. Deze waarden worden bij elkaar opgeteld zodra er op een knop geklikt word en deze wil ik vervolgens presenteren in de footer. Die PostBack is volgens mij niet nodig want de Grid wordt in de PageLoad de eerste keer gevuld:

code:
1
2
3
4
5
6
if (!IsPostBack)
{
DataGrid1.DataSource...
...
..
}

Verwijderd

Topicstarter
Verwijderd schreef op 15 October 2003 @ 10:30:
Soms zijn de grootste problemen die je zo gemakkelijk over het hoofd ziet...vandaar mijn reactie. Krijg je een foutmelding of geeft hij nog steeds de oude tekst weer? (Waarschijnlijk het laatste, anders kon je gaan zoeken op de foutmelding...)
Inderdaad dat laatste, tijdens het debuggen loopt hij gewoon door de code heen zonder problemen, er gebeurt echter niets.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Hoe wil je de datagridwaarde wijzigen zonder postback?

[ Voor 55% gewijzigd door gorgi_19 op 15-10-2003 10:44 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik heb geen id, jij? (met postback is ook prima :))

  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

Ten eerste: (in de properties van de datagrid)
- ShowFooter = True

Dan:
- Afvangen van de ItemDataBound event.

code:
1
2
3
4
5
6
7
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Footer)
    {
        e.Item.Cells[dag + 2].FooterText = vervang;
    }
}


Succes

Verwijderd

Topicstarter
Ik kom er niet helemaal aan uit. De footer wordt dus pas gevuld zodra er op een knop geklikt wordt. Roep ik dan de DataBind() methode opnieuw aan, verdwijnt mijn gehele grid..

  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

Maak voor het gemak de methode BindGrid.
code:
1
2
3
4
5
private void BindGrid()
{
    DataGrid1.DataSource = ...;
    DataGrid1.DataBind();
}


Dan

code:
1
2
3
4
5
6
7
private void Page_Load(object sender, System.EventArgs e)
{
    if (!IsPostBack)
    {
        BindGrid();
    }
}


Roep in iedergeval de BindGrid() methode aan bij de Click event van de Button.

code:
1
2
3
4
5
private void Button1_Click(object sender, System.EventArgs e)
{
    DataGrid1.Columns[dag + 2].FooterText = vervang;
    BindGrid();
}

[ Voor 3% gewijzigd door Riegstar op 15-10-2003 11:56 . Reden: teipo ]


Verwijderd

Topicstarter
Okay, Uiteraard maak ik ook gebruik van zo'n dergelijke methode (meerdere omdat je op meerdere manieren binnen kan komen). Als ik de methode opnieuw aanroep worden de totalen van de kolommen inderdaad netjes getoond. Vervelend is wel dat de zojuis ingevulde waarden nu allemaal verdwenen zijn aangezien de Grid weer gevuld wordt met de oude datasource.


De ingegeven waarden moeten dus blijven staan zodat deze opgeslagen kunnen worden.

[ Voor 21% gewijzigd door Verwijderd op 15-10-2003 13:14 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Wat doe je eigenlijk in die FooterText?

https://fgheysels.github.io/


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

Ja, goeie vraag... en welke "nieuwe" waarden?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 gokt.. :P

Data wordt opgehaald in een disconnected dataset. Deze worden opgeslagen in de viewstate, waarna bij iedere postback de disconnected dataset, met nieuwe toevoegingen, wordt gebind aan de datagrid.

En na bevestigen wort alles geupdate :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Okay, in de datagrid worden uren verantwoord:

Omschrijving MA DI WO .... ZO

vervolgens komen er een aantal activiteiten met daarachter de gewerkte uren per activiteit en in de footer worden deze uren opgeteld weergegeven. Na een controle of er aan de normuren voldaan wordt worden de uren opgeslagen in een tabel

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
De controle of het aantal uren voldaan is, kan je doen op DB niveau, bij het opslaan.
Het tonen van het totaal aantal uren kan je dan doen als alles opgeslagen is.

https://fgheysels.github.io/


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private DataSet DS
(
    get
    {
        return ViewState["DS"] as DataSet;
    }
    set
    {
        ViewState["DS"] = value;
    }
}

private void GetFreshDataSet()
{
    DS = vers van de db;
}

private void BindGrid()
{
    DataGrid1.DataSource = DS;
    DataGrid1.DataBind();
}

private void Page_Load(object sender, System.EventArgs e)
{
    if (!IsPostBack)
    {
        GetFreshDataSet();
        BindGrid();
    }
}

private void Button1_Click(object sender, System.EventArgs e)
{
    DataGrid1.Columns[dag + 2].FooterText = vervang;
    BindGrid();
}

private void UpdateAlles_Click(object sender, System.EventArgs e)
{
    Sla DS op;

    GetFreshDataSet();
    BindGrid();
}


De nieuwe toevoegingen doe je dus aan dataset DS. (de dataset in de viewstate)
Pagina: 1