[ASP.NET] DataView en Data-Manupulatie

Pagina: 1
Acties:

  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 01-05 19:11
Hoi mensen,

Ik zal het 'probleem' zo kort mogelijk houden.
Weet bijna zeker dat het simpel is, maar heb nu een poosje zitten googlen en kan het niet vinden.
Het gaat hier om ASP.NET icm. VB.NET.

Ik heb een dataview, met daaraan een datasource gekoppeld. (gemakkelijk de ingebouwde controls gebruiken)
Echter nu heb ik in de database een veld "klanttype" dit heeft een waarde van 0-2.

Nu poept dat ding in de dataview in de kolom Type (die ik overigens zelf heb aangemaakt) gewoon het nummer, echter ik wil dat ik een if statement kan uitvoeren binnen het te laden item.
Dus stel: wanneer het nummer 0 is, verander dan de tekst die in de kolom komt in: Particulier, als dit 1 wordt verander de waarde in de kolom naar Onderneming etc.

Ik bind op dit moment de gegevens zo aan mijn dataviewtje:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<asp:GridView ID="gvKlntOverzicht" runat="server" AutoGenerateColumns="False" 
CellPadding="4" ForeColor="#333333" GridLines="None" Font-Names="Tahoma" 
Font-size="Smaller">
            <Columns>
                <asp:BoundField HeaderText="Type" DataField="klanttype" />
                <asp:BoundField HeaderText="Klantnaam" datafield="bedrijfsnaam" />
                <asp:BoundField HeaderText="Woonplaats" datafield="aawoonplaats" />
                <asp:BoundField HeaderText="Email" datafield="email" />
                <asp:HyperLinkField Text="Wijzigen" DataNavigateUrlFields="id" 
DataNavigateUrlFormatString="act_klnt_wijzigen.aspx?id={0}"/>
            </Columns>
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <EditRowStyle BackColor="#999999" />
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>


Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
    Dim classDatabase As New clsDatabase
    Dim classBase As New clsBase

    Dim DS As New Data.DataSet

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not classDatabase.fVullenDataset("SELECT * FROM tbl_klanten", "tblKlanten", DS) = True Then
            Response.Write("Kan dataset niet vullen: Klanten Overzicht")
        End If

        gvKlntOverzicht.DataSource = DS.Tables("tblKlanten")
        gvKlntOverzicht.DataBind()
    End Sub


Dus in principe laat hij de data netjes zien zoals deze in de database staat. Maar ik wil er dus naar de gebruiker toe iets mee doen.
Weten jullie hier 1-2-3 op ?

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Ik ben niet echt thuis in VB.NET of ASP.NET, hopelijk heb je dus wat aan mijn reactie. Omdat ik niet precies weet hoe je een datagrid kan manipuleren, lijkt het mij verstandig om het IF-statement in je SQL op te nemen, dus doe zoiets als:
code:
1
2
-- Dit is een MySQL query, je moet hem nog ff ombouwen naar een MSSQL query verwacht ik
SELECT IF( `fieldname` = 0, "string value", IF( `fieldname` = 1, "string value", "string value") ) AS `type` FROM `tablename`


Ik zit nog ff te denken, hoe ik dit in oa Delphi met hun datasource en datagrid kon doen, als ik het weet geef ik wel een gil.

--side note--
Het is in mijn ervaring, niet verstandig om dit soort omzettingen in SQL te doen. Ik zou, voor dit soort zaken een extra tabel nemen, waarin je type definieer met een ID en een Schermnaam, hier vanuit de klanten tabel een koppeling naar left dmv een foreign key en dan via een query de juiste gegevens ophalen. Performance technische en normaliseringstechnisch zou dat namelijk de beste oplossing zijn. Een IF-statement wordt namelijk per record uitgevoerd en maakt de query erg traag).

[ Voor 48% gewijzigd door 0528973 op 18-07-2005 00:02 ]

Pascal


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 27-08-2021

CaptBiele

No Worries!

als je conversies altijd hetzelfde zijn, kan je het in code opnemen. Als het erg dynamisch is, zou ik het inderdaad opnemen in de database.
Als je het in code wilt doen, moet je denk ik PreRender( ) gebruiken. (iig iets met Render) Dan is de data beschikbaar, maar is de HTML nog niet gegenereerd, en kun je dus nog dingen wijzigen.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:33

mulder

ik spuug op het trottoir

oogjes open, snaveltjes dicht


Verwijderd

Nu ben ik ook niet bekend in ASP, maar als ik even naar de docs kijk (msdn) zie ik dat je een die tables functie een DataTable opleverd. Met deze kun je makkelijk met een for each over de rows itereren, en in een row kun je direct schrijven.

Geen idee, of dat hier mag, maar dat zou mischien ook kunnen?