Avatar billede jaffafo Nybegynder
26. oktober 2005 - 15:26 Der er 60 kommentarer og
1 løsning

Sortering i datagrid

I mit datagrid er følgende headertemplate:

<headertemplate>
<table width="100%" cellpadding="2" cellspacing="0">
<tr class="header">
<td width="170"><asp:LinkButton ID="lnknavn" CommandName="sort" CommandArgument="navn" Text="Navn" runat="server" /></td>
<td width="70"><asp:LinkButton ID="lnkvaerdi" CommandName="sort" CommandArgument="vaerdi" Text="Værdi" runat="server" /></td>
<td width="40"><asp:LinkButton ID="lnkalder" CommandName="sort" CommandArgument="alder" Text="Alder" runat="server" /></td>
<td width="50"><asp:LinkButton ID="lnklon" CommandName="sort" CommandArgument="lon" Text="Løn" runat="server" /></td>
<td width="70"><asp:LinkButton ID="lnkposition" CommandName="sort" CommandArgument="position" Text="Position" runat="server" /></td>
<td width="60"><asp:LinkButton ID="lnkben" CommandName="sort" CommandArgument="ben" Text="Ben" runat="server" /></td>
<td width="50"><asp:LinkButton ID="lnkteknik" CommandName="sort" CommandArgument="teknik" Text="Teknik" runat="server" /></td>
<td width="50"><asp:LinkButton ID="lnkmental" CommandName="sort" CommandArgument="mental" Text="Mental" runat="server" /></td>
<td width="50"><asp:LinkButton ID="lnkfysik" CommandName="sort" CommandArgument="fysik" Text="Fysik" runat="server" /></td>
<td width="50"><asp:LinkButton ID="lnkstats" CommandName="sort" CommandArgument="stats" Text="Stats" runat="server" /></td>
<td width="170"><asp:LinkButton ID="lnkkontrakt" CommandName="sort" CommandArgument="kontrakt" Text="Kontrakt" runat="server" /></td>
</tr>
</headertemplate>


og den del af XML'en der skal vises her ser sådan her ud:

  <spiller_id>399817</spiller_id>
  <navn>Renee Villadsen</navn>
  <vaerdi>99000</vaerdi>
  <kontraktudloeb>2005-11-13 11:47:45</kontraktudloeb>
  <lon>0</lon>
  <alder>15</alder>
  <position>Angreb</position>
  <kampe>0</kampe>
  <scoringer>0</scoringer>
  <mom>0</mom>
  <udmaerkelse />
  <afslutning>12</afslutning>
  <dribling>10</dribling>
  <aflevering>8</aflevering>
  <takling>8</takling>
  <markering>7</markering>
  <straffespark>5</straffespark>
  <mod>10</mod>
  <kreativitet>12</kreativitet>
  <beslutsomhed>3</beslutsomhed>
  <indflydelse>14</indflydelse>
  <kampaand>3</kampaand>
  <udenbold>7</udenbold>
  <acceleration>17</acceleration>
  <balance>7</balance>
  <kondition>4</kondition>
  <hop>8</hop>
  <styrke>8</styrke>
  <udholdenhed>13</udholdenhed>
  <ben>Højre</ben>

Og min sorteringskode ser sådan her ud:

Public sub sortering(source As Object, e As System.Web.UI.WebControls.DataGridSortCommandEventArgs)
Dim d as dataset = hentdata()
Dim xview as new Dataview(d.tables("spiller"))
xview.sort = e.SortExpression
response.write(e.SortExpression)
dgtest.Datasource = xview
dgtest.databind()
End sub

Det virker fint nok, men et par kolonner virker ikke. Nemlig Teknik, Fysik og Mental. Disse fungerer ikke da jeg samler nogle kolonner i datagriddet til de 3 kolonner. Mit problem er så:

- Hvordan kan jeg sortere efter de 3 kolonner? Skal det laves helt anderledes?
- Når jeg trykker på overskrifterne kan jeg kun sortere en vej. Hvordan kan jeg bestemme om det skal være Ascending eller Descending.


Håber jeg har forklaret det godt nok :)
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 16:56 #1
mht asc og desc så kan du bruge:
definer en static(det hedder det i c#) int kaldet numberDiv
og prøv med:
Public sub sortering(source As Object, e As System.Web.UI.WebControls.DataGridSortCommandEventArgs)
Dim d as dataset = hentdata()
Dim xview as new Dataview(d.tables("spiller"))
----c# kode----
if( (numberDiv%2) == 0 )
xview.sort = e.SortExpression + " " + "ASC";
else
xview.sort = e.SortExpression + " " + "DESC";
----c# kode----
response.write(e.SortExpression)
numberDiv++;
dgtest.Datasource = xview
dgtest.databind()
End sub

det har jeg brugt.
Men du skal selvfølgelig konverterer c# koden til VB
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 17:00 #2
Nogen der kan oversætte dr_chaos indlæg til VB? :p
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 17:03 #3
int skal være
public Shared numberDiv
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 17:05 #4
If numberDiv%2) == 0 then
xview.sort = e.SortExpression + " " + "ASC";
Else
xview.sort = e.SortExpression + " " + "DESC";
End If
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 17:26 #5
if( (numberDiv%2) == 0 )

Den linje giver denne fejl:

Compiler Error Message: BC30198: ')' expected.

+ jeg forstår ikke helt hvad numberDiv%2 betyder :/
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 17:36 #6
Det er modulo.
det betyder at den bliver ved med at trække 2 fra tallet numberdiv indtil den ikke kan trække 2 fra uden at komme under 0 eller hvis den har ramt 0.
3 modulo 2 bliver 1 fordi der er en til rest.
Det er en måde at finde ud af om der sidste gang blev sorter asc eller desc.
Når  numberDiv%2 == 0 så er der sidst blevet sortere desc
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 18:38 #7
if (numberDiv Mod 2) = 0
    xview.sort = e.SortExpression & " " & "ASC"
Else
    xview.sort = e.SortExpression & " " & "DESC"
End If

Giver altid <sortexpression> ASC.. aldrig Desc.

For at få DESC må numberDiv vel ændres til et eller andet når jeg trykker på linket, men til hvad og hvordan gør jeg det? :)
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 18:39 #8
numberDiv++;
indsættes efter end if
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 18:40 #9
det sætter numberdiv til sin egen værdi + 1
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 18:42 #10
Nevermind.. jeg fandt ud af det..  jeg glemte at oversætte numberdiv++; linjen :)

Men nu har jeg endnu et problem:

Hvis brugeren har trykket på "løn" kolonnen 2 gange så får han DESC. Næste gang trykker han så på "Værdi" og så får han ASC. Hvordan kan jeg sikre at brugeren ALTID får DESC første gang han trykker på en NY kolonne? :) Nogen idéer?
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 18:48 #11
måske kan du lave et bool array som bruges til enten at sorterer asc eller desc.
en plads i arrayet svarer til en kolonne i datagrid.
hvis man sorterer kolonne 1 og plads 1 i bool array er false så sorteres der asc
hvis plads 1 er true sorteres der desc.
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 18:49 #12
iøvrigt..  smid bare et svar :)  du får 50% af pointsene :)  men har du et svar til det sidste spørgsmål? :P
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 19:00 #13
svar
hvis du mener - Hvordan kan jeg sortere efter de 3 kolonner? Skal det laves helt anderledes?
Jeg er ikke helt sikker på hvad du mener kan du forklare det nærmere ?
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 19:07 #14
du kan måske lave en hidden kolonne og så bruge den som sort argument.
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 19:27 #15
det er fordi jeg lægger nogle tal sammen sådan her:

<td><%# Skill(container.dataitem("afslutning"), container.dataitem("dribling"), container.dataitem("aflevering"), container.dataitem("takling"), container.dataitem("markering"), container.dataitem("straffespark")) %></td>

De bliver bare lagt sammen i en function. Men hvordan kan jeg sortere efter denne kolonne? Er det overhovedet muligt?
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 19:29 #16
prøv at sorterer dem efter "Skill"
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 19:37 #17
Virker hellere ikke..

Tror jeg nok bliver nødt til at smide 3 nye kolonner ind på datasettet. Ved hvordan jeg kan gøre det?..

Dvs jeg skal lægge nogle tal fra datasettet sammen og smide det ind i datasettet igen. :)
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 19:40 #18
har du dine data i en database?
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 19:59 #19
Jeg har en URL til en XML som jeg henter ind i et dataset.
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 20:03 #20
hvad består skill af er det bare en simpel sum af de værdier der sendes til skill funktionen ?
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 20:04 #21
Public Function Skill(a As Integer, b As Integer, c As integer, d as integer, e as integer, f as integer) As Integer
  Return a + b + c + d + e + f
End Function
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 20:08 #22
når du henter laver datasettet så kan du tilføje en ny kolonne til datasettet hvor du ligger alle de værdier sammen.
og bruger den kolonne i datagriddet. så kan du sorterer på den.
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 20:10 #23
det lyder fornuftigt :)  Har du et eksempel? :)
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 20:10 #24
prøver lige at finde et.
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 20:23 #25
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 20:32 #26
undskyld jeg tog fejl.
du skal adde en datacolumn til dit dataset.
i c# er det

ds.Tables[0].Columns.Add("skill");
hvor ds er dit dataset.
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 20:33 #27
der efter skal du gennemløbe alle rows i datasettet og så indsætte f.eks. værdien for skill i den "skill" column du tilføje tidligere.
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 20:54 #28
hej..  jeg forstår godt hvad du mener, men jeg aner ikke hvor jeg skal gøre det :/

Kan jeg godt lige poste min kode så du lige kan komme med et godt bud?
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 20:55 #29
ja jeg vil prøve at nå og kigge på det ellers ser jeg på det imorgen.
Avatar billede jaffafo Nybegynder
26. oktober 2005 - 21:14 #30
Først min kodefil:

Option Strict Off

Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Data
Imports System.XML
Imports Microsoft.VisualBasic

Public Class XML : Inherits Page

    Protected dgKlub as Datagrid
    Protected dgtest, dgtest2 as Datagrid
    Protected lblfejl as label
    Protected txtklubid as textbox
    Protected btnhentdata as linkbutton
    public XMLdata as New Dataset
    Dim SortExpression As String
    public antalspillere as string
    public XMLKlub as String
    public Shared numberDiv as integer
    Public teknik, mental, fysik, stats as string
   
    Public sub Page_Load(Source as Object, E as EventArgs)
        if page.ispostback
            lblfejl.visible = false
        end if
    end sub
   
    public sub data(sender As Object, e As System.EventArgs)
        Xmldata.clear()
        hentdata()
    end sub

    private function hentdata() as dataset
        xmlklub = "http://xxx.dk/xmlout2.php?klub_id=" & txtklubid.text
        XMLdata.ReadXML(XMLKlub)
       
        Select Case tjekklub(xmldata)
        Case "aktiv"
            dgklub.visible = true
            dgKlub.datasource = XMLData.Tables("klub")
            dgKlub.databind()
           
            Select case tjek_spillere(xmldata)
            Case "har spillere"
                antalspillere = antal_spillere(xmldata)
                dgtest.visible = true
                dgtest.datasource = XMLData.Tables("spiller")
                dgtest.databind()
            Case "har ikke spillere"
                antalspillere = "Ingen spillere"
                dgtest.visible = false
            end select
        Case "ikke aktiv"
            dgklub.visible = false
            dgtest.visible = false
            lblfejl.visible = true
            lblfejl.text = "Klubben findes ikke"
        end select
       
        return xmldata
    end function
   
    Private function tjekklub(d as dataset) as string
        dim doc as new XmlDocument()
        doc.LoadXML(d.getXML)
        dim xxx as XmlNode = doc.SelectSingleNode("//doc/klub/klub_id")

        If xxx.HasChildNodes Then
            return "aktiv"
        else
            return "ikke aktiv"
        End If
    End function
   
    Private function tjek_spillere(d as dataset)
        dim doc as new XmlDocument()
        doc.LoadXML(d.getxml)
        dim xxx as XmlNode = doc.SelectSingleNode("//doc/klub/spillere")

        If xxx.HasChildNodes Then
            return "har spillere"
        else
            return "har ikke spillere"
        End If
    End function
   
    Private function antal_spillere(d as dataset) as string
        try
            Dim dtable as datatable = d.tables("spiller")
            Dim strExpr As String
           
            strExpr = "spiller_id > 0"
           
            Dim foundRows As DataRow() = dtable.Select(strExpr)
            Dim row as datarow
           
            If foundRows.Length <= 0 Then
                return "Ingen spillere"
            else
                return foundRows.Length.tostring()
            End If
        catch ex as exception
            'fejlbesked her
        end try
    End function

    Public Function Skill(navn as string, a As Integer, b As Integer, c As integer, d as integer, e as integer, f as integer) As Integer
        Select Case navn
            Case "teknik"
                response.write("teknik")
            Case "mental"
                response.write("mental")
            Case "fysik"
                response.write("fysik")
        End select
        Return a + b + c + d + e + f
    End Function
   
    Public Function Samletskill(a As Integer, b As Integer, c As integer, d as integer, e as integer, f as integer, g as integer, h as integer, i as integer, j as integer, k as integer, l as integer, m as integer, n as integer, o as integer, p as integer, r as integer, s as integer) As Integer
        stats = a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + r + s
        return stats
    End Function
   
    Public Function maxindtaegt(a As Integer, b As Integer, c As integer) As integer
        Return a * b * c
    End Function
   
    Public sub sortering(source As Object, e As System.Web.UI.WebControls.DataGridSortCommandEventArgs)
       
        Dim d as dataset = hentdata()
       
        Dim xview as new Dataview(d.tables("spiller"))
       
        'if ((numberDiv Mod 2) = 0)
        '    xview.sort = e.SortExpression & " " & "ASC"
        'Else
        '    xview.sort = e.SortExpression & " " & "DESC"
        'End If
       
        xview.sort = e.SortExpression
       
        'numberdiv = numberDiv + 1
       
        dgtest.Datasource = xview
        dgtest.databind()
    End sub
   
    Public Function formater(a as datetime) As string
        Dim nu as DateTime = DateTime.Now
        Dim Udloeb As System.TimeSpan = System.DateTime.op_Subtraction(a.Tostring(), nu.Tostring())
        Dim streng as string
       
        If udloeb.days.tostring() < 3 then
            streng = "<b><font color='#ff00000'>" & Udloeb.days & " Dage " & Udloeb.Hours & " timer og " & Udloeb.Minutes & " min</font></b>"
        else
            streng = Udloeb.days & " Dage " & Udloeb.Hours & " timer og " & Udloeb.Minutes & " min"
        end if
       
        return streng
    End Function

    Public function Udmaerk(a as string) as string
        Select case a
            Case "Talent"
                Return "<img src='http://www.xxx.dk/gfx/talent.gif' alt='" & a & "' />"
            Case "Wonderkid"
                Return "<img src='http://www.xxx.dk/gfx/wonderkid.gif' alt='" & a & "' />"
            Case "Klasse-keeper"
                Return "<img src='http://www.xxx.dk/gfx/klasse.gif' alt='" & a & "' />"
            Case "Klasse-forsvar"
                Return "<img src='http://www.xxx.dk/gfx/klasse.gif' alt='" & a & "' />"
            Case "Klasse-midtbane"
                Return "<img src='http://www.xxx.dk/gfx/klasse.gif' alt='" & a & "' />"
            Case "Klasse-angreb"
                Return "<img src='http://www.xxx.dk/gfx/klasse.gif' alt='" & a & "' />"
            Case "Verdensklasse-keeper"
                Return "<img src='http://www.xxx.dk/gfx/verdensklasse.gif' alt='" & a & "' />"
            Case "Verdensklasse-forsvar"
                Return "<img src='http://www.xxx.dk/gfx/verdensklasse.gif' alt='" & a & "' />"
            Case "Verdensklasse-midtbane"
                Return "<img src='http://www.xxx.dk/gfx/verdensklasse.gif' alt='" & a & "' />"
            Case "Verdensklasse-angreb"
                Return "<img src='http://www.xxx.dk/gfx/verdensklasse.gif' alt='" & a & "' />"
        End select
    end function

end Class


Her er så mine datagrids:

<asp:DataGrid HorizontalAlign="Center" ID="dgKlub" BorderColor="#cccccc" BorderStyle="Solid" BorderWidth="1px" BackColor="#dedede" Font-Name="Verdana" ShowHeader="false" ShowFooter="false" GridLines="None" AutoGenerateColumns="false" runat="server">
<columns>
<asp:TemplateColumn>
<itemtemplate>
<table style="font-size:10px;" width="400" cellpadding="0" cellspacing="0">
<tr>
<td width="200" height="22" style="font-weight:bold;">Klubnavn:</td>
<td><%# container.dataitem("klubnavn") %> (ID: <%# container.dataitem("klub_id") %>)</td>
</tr>
<tr>
<td height="22" style="font-weight:bold;">Stadion:</td>
<td><%# container.dataitem("stadionnavn") %> (<%# container.dataitem("stadionkap") %> pladser)</td>
</tr>
<tr>
<td height="22" style="font-weight:bold;">Hold farver:</td>
<td>
<table width="40" height="20" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="<%# container.dataitem("color1") %>"></td>
<td bgcolor="<%# container.dataitem("color2") %>"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="22" style="font-weight:bold;">Antal spillere: </td>
<td><%=antalspillere %></td>
</tr>
<tr>
<td height="22" style="font-weight:bold;">Max indtægt om dagen:</td>
<td><%# maxindtaegt(container.dataitem("billetpris"), container.dataitem("stadionkap"), 3) %> (Billetpris: <%# container.dataitem("billetpris") %>)</td>
</tr>
</table>
</itemtemplate>
</asp:TemplateColumn>
</columns>
</asp:DataGrid>


<asp:DataGrid ID="dgtest" HeaderStyle-BackColor="#CCCCCC" CssClass="dgtest" ShowHeader="true" ShowFooter="true" GridLines="none" AutoGenerateColumns="false" HorizontalAlign="Center" AllowSorting="true" OnSortCommand="sortering" runat="server">
<columns>
<asp:TemplateColumn>
<headertemplate>
<table width="100%" cellpadding="2" cellspacing="0">
<tr class="header">
<td width="170">Navn <asp:imagebutton ID="ibtnnavn" CommandName="sort" CommandArgument="navn ASC" ImageUrl="billeder/down.gif" runat="server" /><asp:imagebutton ID="ibtnnavnup" CommandName="sort" CommandArgument="navn DESC" ImageUrl="billeder/up.gif" runat="server" /></td>
<td width="70">Værdi <asp:LinkButton ID="lnkvaerdi" CommandName="sort" CommandArgument="vaerdi" Text="Værdi" runat="server" /></td>
<td width="40">Alder <asp:LinkButton ID="lnkalder" CommandName="sort" CommandArgument="alder" Text="Alder" runat="server" /></td>
<td width="50">Løn <asp:LinkButton ID="lnklon" CommandName="sort" CommandArgument="lon" Text="Løn" runat="server" /></td>
<td width="70">Position <asp:LinkButton ID="lnkposition" CommandName="sort" CommandArgument="position" Text="Position" runat="server" /></td>
<td width="60">Ben <asp:LinkButton ID="lnkben" CommandName="sort" CommandArgument="ben" Text="Ben" runat="server" /></td>
<td width="50">Teknik <asp:LinkButton ID="lnkteknik" CommandName="sort" CommandArgument="teknik" Text="Teknik" runat="server" /></td>
<td width="50">Mental <asp:LinkButton ID="lnkmental" CommandName="sort" CommandArgument="mental" Text="Mental" runat="server" /></td>
<td width="50">Fysik <asp:LinkButton ID="lnkfysik" CommandName="sort" CommandArgument="fysik" Text="Fysik" runat="server" /></td>
<td width="50">Stats <asp:LinkButton ID="lnkstats" CommandName="sort" CommandArgument="stats" Text="Stats" runat="server" /></td>
<td width="170">Kontrakt <asp:LinkButton ID="lnkkontrakt" CommandName="sort" CommandArgument="kontraktudloeb" Text="Kontrakt" runat="server" /></td>
</tr>
</headertemplate>
<itemtemplate>
<tr class="item">
<td><%# container.dataitem("navn") %> <%# Udmaerk(container.dataitem("udmaerkelse")) %></td>
<td><%# container.dataitem("vaerdi") %></td>
<td><%# container.dataitem("alder") %></td>
<td><%# container.dataitem("lon") %></td>
<td><%# container.dataitem("position") %></td>
<td><%# container.dataitem("ben") %></td>
<td><%# Skill("teknik", container.dataitem("afslutning"), container.dataitem("dribling"), container.dataitem("aflevering"), container.dataitem("takling"), container.dataitem("markering"), container.dataitem("straffespark")) %></td>
<td><%# Skill("mental", container.dataitem("mod"), container.dataitem("kreativitet"), container.dataitem("beslutsomhed"), container.dataitem("indflydelse"), container.dataitem("kampaand"), container.dataitem("udenbold")) %></td>
<td><%# Skill("fysik", container.dataitem("acceleration"), container.dataitem("balance"), container.dataitem("kondition"), container.dataitem("hop"), container.dataitem("styrke"), container.dataitem("udholdenhed")) %></td>
<td><%# Samletskill(container.dataitem("afslutning"), container.dataitem("dribling"), container.dataitem("aflevering"), container.dataitem("takling"), container.dataitem("markering"), container.dataitem("straffespark"), container.dataitem("mod"), container.dataitem("kreativitet"), container.dataitem("beslutsomhed"), container.dataitem("indflydelse"), container.dataitem("kampaand"), container.dataitem("udenbold"), container.dataitem("acceleration"), container.dataitem("balance"), container.dataitem("kondition"), container.dataitem("hop"), container.dataitem("styrke"), container.dataitem("udholdenhed")) %></td>
<td><%# formater(Container.DataItem("kontraktudloeb")) %></td>
</tr>
</itemtemplate>
<footertemplate>
</table>
</footertemplate>
</asp:TemplateColumn>
</columns>
</asp:DataGrid>
<asp:DataGrid ID="dgtest2" AutoGenerateColumns="true" runat="server" />
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 22:05 #31
har du evt mulighed for at modificere xml filen før du loader den ind i datagriddet ?
det tror jeg er den nemmeste løsning.
Avatar billede jaffafo Nybegynder
27. oktober 2005 - 07:08 #32
nej det kan jeg desværre ikke :/
Avatar billede dr_chaos Nybegynder
27. oktober 2005 - 08:38 #33
prøv at lave denne linie om til
<td width="50">Teknik <asp:LinkButton ID="lnkteknik" CommandName="sort" CommandArgument="teknik" Text="Teknik" runat="server" /></td>

<td width="50">Teknik <asp:LinkButton ID="lnkteknik" CommandName="sort" CommandArgument="afslutning+dribling+aflevering+takling+markering+markering+straffespark" Text="Teknik" runat="server" /></td>
Avatar billede dr_chaos Nybegynder
27. oktober 2005 - 10:19 #34
jeg har fundet løsningen til dig.
jeg poster den om ikke så længe har lige et akut problem jeg skal løse på arb.
Avatar billede dr_chaos Nybegynder
27. oktober 2005 - 11:13 #35
løsning er at tilføje en ny kolonne til dataviewet når du sorterer.
if e.SortExpression == "Test" then
            {
                oView.Table.Columns.Add("Test");
                foreach(DataRow dr in oView.Table.Rows)
                {
                    dr["Test"] =int.Parse( dr["Age"].ToString())+int.Parse( dr["EmpID"].ToString());
                }
                oView.Sort = "Test";
end IF
Avatar billede dr_chaos Nybegynder
27. oktober 2005 - 11:17 #36
prøver lige at konverterer det så det passer til din.
Avatar billede dr_chaos Nybegynder
27. oktober 2005 - 12:02 #37
prøv med det her:
Public sub sortering(source As Object, e As System.Web.UI.WebControls.DataGridSortCommandEventArgs)
     
        Dim d as dataset = hentdata()
     
        Dim xview as new Dataview(d.tables("spiller"))
       
        Select case e.SortExpression
            Case "teknik"
            xview.Table.Columns.Add("teknik");
            For Each row As DataRow In ds.Tables(0).Rows
            row("teknik") = CTYPE(row("afslutning"),int32)+CTYPE(row("dribling"),int32)+CTYPE(row("aflevering"),int32)+CTYPE(row("takling"),int32)+CTYPE(row("markering"),int32)+CTYPE(row("straffespark"),int32)
            next
            Case "mental"
            xview.Table.Columns.Add("mental");
            For Each row As DataRow In ds.Tables(0).Rows
            row("teknik") = CTYPE(row("mod"),int32)+CTYPE(row("kreativitet"),int32)+CTYPE(row("beslutsomhed"),int32)+CTYPE(row("indflydelse"),int32)+CTYPE(row("kampaand"),int32)+CTYPE(row("udenbold"),int32)
            next
            Case "fysik"
            xview.Table.Columns.Add("fysik");
            For Each row As DataRow In ds.Tables(0).Rows
            row("teknik") = CTYPE(row("acceleration"),int32)+CTYPE(row("balance"),int32)+CTYPE(row("kondition"),int32)+CTYPE(row("hop"),int32)+CTYPE(row("styrke"),int32)+CTYPE(row("udholdenhed"),int32)
            next
        End select
        if ((numberDiv Mod 2) = 0)
            xview.sort = e.SortExpression & " " & "ASC"
        Else
            xview.sort = e.SortExpression & " " & "DESC"
        End If
     
        xview.sort = e.SortExpression
     
        numberdiv = numberDiv + 1
     
        dgtest.Datasource = xview
        dgtest.databind()
Avatar billede dr_chaos Nybegynder
27. oktober 2005 - 15:29 #38
virkede det ?
Avatar billede jaffafo Nybegynder
27. oktober 2005 - 23:02 #39
nej det virker stadig ikke helt :/

Den sorterer godt nok, men den sorterer det ikke helt rigtigt..

Du kan se applikationen her: http://80.198.102.188/xstats/

Prøv og brug ID'en 699
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 08:08 #40
jeg får denne fejl:
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".


<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>


Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.


<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
    </system.web>
</configuration>
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 08:10 #41
hvad er dine indstillinger for customErrors ?
Avatar billede jaffafo Nybegynder
28. oktober 2005 - 08:21 #42
Prøv igen :)
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 09:16 #43
jeg kan godt se at den sorterer men ikke korrekt.
jeg tror at den sorterer som en streng i stedet for en int.
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 09:16 #44
jeg kigger lige på det
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 09:35 #45
i xview.Table.Columns.Add("teknik");
kan du sætte en type på kolonnen efter komma
i c# er det  som sættes efter komma på denne måde
xview.Table.Columns.Add("teknik", typeof(System.int32));
jeg ved ikke hvad den lignende kommando hedder i vb. men jeg søger efter den.
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 09:37 #46
prøv med
xview.Table.Columns.Add("teknik",  GetType(System.Int32));
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 09:40 #47
uden ; self
Avatar billede jaffafo Nybegynder
28. oktober 2005 - 10:06 #48
Det fungerer udmærket :)

Så har jeg vist fået løst alle problemerne.. :)

Dog har et lille spørgsmål mere :D..

I "position" kolonnen er det muligt at bestemme rækkefølgen af sorteringen på nogen som helt måde?. Jeg vil nemlig gerne sortere efter: keeper, forsvar, midtbane, angreb. Som nu er sorterer den efter alfebetet. :)
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 10:14 #49
så skal du tilføje endnu en kolonne :
på samme måde som teknik.
Derefter gennemløber du alle rows og se på hvilken position de har hvis nu spilleren er angriber så indsætter du et 1 tal i den nye kolonne midtbane et 2 tal, forsvar 3 og målmand 4.
Typen på kolonnen skal være System.int32. ligesom ved teknik.
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 10:14 #50
giver det mening ?
Avatar billede jaffafo Nybegynder
28. oktober 2005 - 10:15 #51
ja det tror jeg..  jeg prøver at lege med det :)
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 10:20 #52
fint nok du skriver bare hvis der er noget :)
Avatar billede jaffafo Nybegynder
28. oktober 2005 - 10:33 #53
Sådan.. løste det med denne kode:

elseif SortStr = "positionsort ASC" or SortStr = "positionsort DESC"
xview.Table.Columns.Add("positionsort", GetType(System.Int32))
For Each row As DataRow In d.Tables("spiller").Rows
Select Case row("position")
Case "Angreb"
    row("positionsort") = 4
Case "Midtbane"
    row("positionsort") = 3
Case "Forsvar"
    row("positionsort") = 2
Case "Keeper"
    row("positionsort") = 1
end select
next
End if


Jeg takker sgu mange gange :)  Har lært en masse af det her.
Nu skulle alt virker som jeg ville have det.

Hvis jeg kunne fik du mere end de 200 points :P
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 10:36 #54
jeg er meget tilfreds med 200.
Hvis du vil må du gerne give mig lidt karma.
Det er meget godt at jeg har været i stand til at hjælpe dig da jeg ikke aner en disse om VB :)
Avatar billede jaffafo Nybegynder
28. oktober 2005 - 10:40 #55
Karma skal du få :)
Avatar billede jaffafo Nybegynder
28. oktober 2005 - 10:48 #56
IF SortStr = "teknik ASC" or SortStr = "teknik DESC"
xview.Table.Columns.Add("teknik", GetType(System.Int32))
For Each row As DataRow In d.Tables("spiller").Rows
  row("teknik") = CTYPE(row("afslutning"),int32)+CTYPE(row("dribling"),int32)+CTYPE(row("aflevering"),int32)+CTYPE(row("takling"),int32)+CTYPE(row("markering"),int32)+CTYPE(row("straffespark"),int32)
next


Hvordan kan jeg i denne kode tjekke om kolonnen teknik eksisterer før den prøvet at oprette en ny?
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 10:53 #57
hvis der er i din sort funktion så vil teknik aldrig eksisterer da du indlæser data fra xml filen igen.
Ellers skal du gøre det ved at gennemløbe alle columns og se om der er en med navnet "teknik".
Avatar billede jaffafo Nybegynder
28. oktober 2005 - 11:04 #58
Har du et lille eksempel? :)
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 11:08 #59
For Each dc As DataColumn In d.Tables("spiller").Columns
  if(dc.ColumnName == "teknik")
  gør et eller andet.
next
Avatar billede dr_chaos Nybegynder
28. oktober 2005 - 11:08 #60
muligvis er koden ikke helt korrekt men det er den vej du skal
Avatar billede jaffafo Nybegynder
28. oktober 2005 - 11:26 #61
Jeg har løst på en anden måde.

Jeg har lavet det sådan at de kolonner bliver oprettet sammen med datasettet hetl i starten (det skal jo kun hentes 1 gang) og så bliver det smidt i en session(). SÅ kan jeg nemlig hent det ind når jeg vil (med kolonnerne)

Og min sortering ser nui sådan ud:

Public function sort(SortStr as string)
  Dim xview as dataview   
  xview = Session("spiller")   
  xview.sort = SortStr
  dgtest.Datasource = xview
  dgtest.databind()
end function

Det giver mange flere muligheder og går applikationen nemmere at udbygge :) Men takker igen for din hjælp :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester