Avatar billede speedpete Nybegynder
06. januar 2006 - 09:16 Der er 9 kommentarer og
1 løsning

GridView Sortering, asp.net 2.0

Jeg har et gridview, hvori jeg indlæser data fra en DB via en ObjectDataSource. Der er fire sorterbare kolonner: Udstedelsesdato, Nummer, Forfaldsdato, Beløb.
Kolonnen 'Nummer' indeholder ButtonFields, som hver især indeholder et link til en faktura.

Problem: Når siden vises første gang, står rækkerne sorteret efter Udstedelsesdato, og klikker man i rækken Nummer på den øverste, som er nummer 873324, så får man fat i faktura nummer 873324. Det er som det skal være - MEN: Sorterer man så tabellen på en anden måde, og så klikker på den øverste, som nu er nummer 863154, så får man STADIG fat i faktura nummer 873324. Det virker altså som om Gridview'et kun sorterer i udseendet, men ikke omstrukturerer linksene.

Koden:
-------------------------
<%@ Page Language="C#" %>

<script runat="server">

    protected void VaelgFaktura(object sender, GridViewCommandEventArgs e)
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow selectedRow = GridView1.Rows[index];
        TableCell FakturaCell = selectedRow.Cells[1];
        LinkButton knap = (LinkButton)FakturaCell.Controls[0];
        Session["VisFakturaNr"] = knap.Text;
        Response.Redirect("Faktura.aspx"); 
    }
 
</script>

  <asp:GridView
        ID="GridView1"
        runat="server"
        DataSourceID="ObjectDataSource1"
        AutoGenerateColumns="False"
        OnRowCommand="VaelgFaktura"
    AllowSorting="True"
    EnableSortingAndPagingCallbacks="True"
        >
        <Columns>
        <asp:BoundField ReadOnly="True" HeaderText="Udstedelsesdato" DataField="T5DOCD" SortExpression="T5DOCD"/>
        <asp:ButtonField ControlStyle-ForeColor="blue" HeaderText="Nummer" DataTextField="T5DOCN" SortExpression="T5DOCN"/>
        <asp:BoundField ReadOnly="True" HeaderText="Forfaldsdato" DataField="T5DUED" SortExpression="T5DUED"/>
        <asp:BoundField ReadOnly="True" HeaderText="Bel&oslash;b" DataField="T5BTOT" ItemStyle-HorizontalAlign="Right" HtmlEncode="false" DataFormatString="{0:F2}" SortExpression="T5BTOT"/>
        </Columns>
    </asp:GridView>
   
    <!-- i GridView: HtmlEncode="false" fixer en bug i .NET2.0 vedørende DataFormatString -->
     
    <asp:ObjectDataSource
        ID="ObjectDataSource1"
        runat="server"
        SelectMethod="GetData"
        TypeName="ClassFakturaliste"
        >
    </asp:ObjectDataSource>
Avatar billede snepnet Nybegynder
06. januar 2006 - 13:03 #1
virker det hvis du sætter denne EnableSortingAndPagingCallbacks false ?

men noget andet ... det ville nok være nemmere - og mere effektivt - hvis du istedet for en postback-button bare satte et link ind istedet.
så kan du sætte linket til Faktura.aspz?fakturaId=<det du nu sætter på knapteksten>
så slipper du for postback, sessionvariable mv.

hvis det heller ikke virker med EnableSortingAndPagingCallbacks=false, så kunne jeg godt tænke mig at se hvordan du viser fakturaen på faktura.aspx

mvh
Avatar billede speedpete Nybegynder
06. januar 2006 - 13:35 #2
EnableSortingAndPagingCallbacks = "false": så får jeg følgende fejl når jeg prøver at sortere vha kolonneoverskriften:

Exception Details: System.FormatException: Input string was not in a correct format.
Source Error (Line7):
Line 5:      protected void VaelgFaktura(object sender, GridViewCommandEventArgs e)
Line 6:      {
Line 7:          int index = Convert.ToInt32(e.CommandArgument);
Line 8:          GridViewRow selectedRow = GridView1.Rows[index];
Line 9:          TableCell FakturaCell = selectedRow.Cells[1];

Hvordan jeg laver fakturaen er en langhåret affære, hvor jeg læser fra tre databasefiler...?
Avatar billede speedpete Nybegynder
06. januar 2006 - 13:38 #3
...Faktura.aspz?fakturaId=".." : Hvordan får man så fat i fakturanummeret på den anden side?
Avatar billede snepnet Nybegynder
06. januar 2006 - 13:57 #4
æhh.. hov ... skulle self have været
Faktura.aspx?fakturaId= ...  (ikke aspz :o)

du henter dine querystringoplysninger sådan her:
(hvis vi siger at dit fakturaid er et tal)

int id = 0;
try
{
  id = int.Parse(Request.QueryString["fakturaId"]);
}
catch
{
  Response.Write("Du skal angive et tal som fakturaid i din querystring");
  // (Response.Write er ikke en anbefaling :o)
}

den fejl du har skrevet får du fordi du har abbonneret på rowcommand-eventet, hvilket så åbenbart også fyres serverside når du sorterer.
da det jo så er i headeren du har klikket - får du fejlen, men det ville nok være godt at checke på commandargument inden du bruger det under alle omstændigheder.

dit link kan du for øvrigt vise sådan her:

<asp:HyperLinkField Text="Vis faktura" DataNavigateUrlFields="T5DOCN" DataNavigateUrlFormatString="faktura.aspx?fakturaId={0}" />

mvh
Avatar billede speedpete Nybegynder
06. januar 2006 - 14:06 #5
Vedr. DataNavigateUrlFormatString="http://faktura.aspx?fakturaId={0}": Det har jeg lige prøvet, men linket ser sådan ud i browseren: http://faktura.aspx/?fakturaId=873324 (bemærk den ekstra / ). Men det løser da ihvertfald problemet med at fakturanumrene ikke følger med i sorteringen.

Jeg skal i øvrigt have tilføjet en root-variabel til URLen, hvordan gør jeg det? bare sådan: DataNavigateUrlFormatString = root + "http....." ?
Avatar billede snepnet Nybegynder
06. januar 2006 - 14:17 #6
du skal ikke skrive http:// - bare skriv det lige som jeg skrev det, så bliver dit resulterende link en absolut url.
mvh
Avatar billede speedpete Nybegynder
06. januar 2006 - 14:18 #7
Jo tak, det var det. Ingen problemer mere. tak.
Avatar billede snepnet Nybegynder
06. januar 2006 - 14:25 #8
jamen det var da så lidt ... vil du have et svar så?
mvh
Avatar billede speedpete Nybegynder
06. januar 2006 - 14:30 #9
tak som byder :-)
Avatar billede snepnet Nybegynder
06. januar 2006 - 14:42 #10
:oD
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