Avatar billede simsen Mester
08. marts 2007 - 10:10 Der er 4 kommentarer og
1 løsning

Sort i Gridview uden DataSourceControl

Hej,

Jeg har et gridview, hvor jeg laver en databound til denne i codebehind (dette fungerer perfekt). Nu vil jeg så sortere efter eksempelvis Navn i gridview'et.

Idet jeg ikke bruger DataSourceControl, har jeg også fundet frem til, jeg i Sorting eventen for gridviewet selv skal sørge for sorteringen....

Jeg har fundet et par links på nettet til dette.... Men af en eller anden grund virker de bare ikke:

Min kode:
aspx
<asp:GridView ID="grdCustomerList" runat="server" AutoGenerateColumns="False" Width="832px" DataKeyNames="KundeId" OnRowCommand="grdCustomerList_RowCommand" AllowSorting="true" OnSorting="grdCustomerList_Sorting" AllowPaging="true" OnPageIndexChanging="grdCustomerList_PageIndexChanging" PageSize="8">
                                            <Columns>
                                                <asp:BoundField DataField="KundeId" HeaderText="Kunde id" SortExpression="KundeId">
                                                    <HeaderStyle Width="65px" />
                                                </asp:BoundField>
                                                <asp:BoundField DataField="Navn" HeaderText="Kundenavn" SortExpression="Navn">
                                                    <HeaderStyle Width="120px" />
                                                </asp:BoundField>
</asp:GridView>

aspx.cs
private string ConvertSortDirectionToSql(SortDirection sortDireciton)
    {
      string newSortDirection = String.Empty;

      switch (sortDireciton)
      {
          case SortDirection.Ascending:
            newSortDirection = "ASC";
            break;

          case SortDirection.Descending:
            newSortDirection = "DESC";
            break;
      }

      return newSortDirection;
    }

    //Sortering
    protected void grdCustomerList_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = grdCustomerList.DataSource as DataTable;
       
        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);
            dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);

            grdCustomerList.DataSource = dataView;
            grdCustomerList.DataBind();
        } 
    }

Når jeg laver en "run to curser" kan jeg se, at den slet ikke kommer ind "if (dataTable != null)" løkken....

Når jeg holder curseren henover
DataTable dataTable = grdCustomerList.DataSource as DataTable;

Kan jeg se at dataTable står til null - men holder jeg curseren hen over grdCustomerList.DataSource kan jeg i count se der står 4.....

Hvor misser jeg et eller andet?

mvh
simsen :-)
Avatar billede dr_chaos Nybegynder
08. marts 2007 - 13:16 #1
hvor og hvordan henter du data ?
Avatar billede simsen Mester
08. marts 2007 - 18:08 #2
Det gør jeg på følgende måde fra FaktureringsApi

public FaktureringApi()
    {
        connection = new OleDbConnection(connectionString);
        command = new OleDbCommand();
        command.Connection = connection;
        connection.Open();
    }

public FStatus GetCustomerList(int FirmaId, ref DataTable CustomerList)
    {
        FStatus status = FStatus.Failure;

        DataRow r = null;
        DataTable AItems = new DataTable();

        try
        {
            AItems.Columns.Add(new DataColumn("KundeId", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("FirmaId", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("Navn", Type.GetType("System.String")));
           
            AItems.Columns.Add(new DataColumn("Adresse", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("Postnr", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("Byen", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("Telefonnr", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("Mobilnr", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("EmailAdr", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("Noter", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("KortNoter", Type.GetType("System.String"), "Substring(Noter, 1, 50) + '...'"));
            AItems.Columns.Add(new DataColumn("km", Type.GetType("System.String")));


            command.CommandText = "SELECT KundeId, FirmaId, Navn, Adresse, Postnr, Byen, Telefonnr, Mobilnr, EmailAdr, Noter, km FROM Kunder WHERE FirmaId = @FirmaId";

            command.Parameters.Clear();
            command.Parameters.Add(new OleDbParameter("@FirmaId", FirmaId));

            OleDbDataReader myReader = command.ExecuteReader();

            //går gennem tabellen og lægger ind i rækker
            while (myReader.Read())
            {
                r = AItems.NewRow();

                try
                {
                    r["KundeId"] = (myReader["KundeId"]);
                    r["FirmaId"] = (myReader["FirmaId"]);
                    r["Navn"] = (myReader["Navn"]);
                    r["Adresse"] = (myReader["Adresse"]);
                    r["Postnr"] = (myReader["Postnr"]);
                    r["Byen"] = (myReader["Byen"]);
                    r["Telefonnr"] = (myReader["Telefonnr"]);
                    r["Mobilnr"] = (myReader["Mobilnr"]);
                    r["EmailAdr"] = (myReader["EmailAdr"]);
                    r["Noter"] = (myReader["Noter"]);
                    r["KortNoter"] = (myReader["KortNoter"]);
                    r["km"] = (myReader["km"]);
                }
                catch
                { }

                //Tilføjer rækken til datatable
                AItems.Rows.Add(r);
            }

            myReader.Close();
            CustomerList = AItems;
            status = FStatus.Success;
        }
        catch
        { }

        return status;
    }

Samt i selve aspx.cs filen:

private void ShowCustomerList()
    {
        //Kundeliste hentes
        FaktureringApi api = new FaktureringApi();
        int user_id = Convert.ToInt32(Session[FaktureringApi.SessionUserId]);

        try
        {
            DataTable CustomerList = null;

            if (api.GetCustomerList(user_id, ref CustomerList) == FaktureringApi.FStatus.Success)
            {
                grdCustomerList.DataSource = CustomerList.DefaultView;
                grdCustomerList.DataBind();
            }

        }
        catch
        { }
        api.Dispose();
    }

mvh
simsen :-)
Avatar billede snepnet Nybegynder
09. marts 2007 - 00:08 #3
Hej Simsen :o)

Hvorfor bruger du ikke bare et DataSet - og lader en adapter fikse det med forbindelsen for dig (open/close).

Hvis du gerne vil styre det selv 100% - så er anbefalingen at du åbner din forbindelse så sent som muligt, og lukker den så tidligt som muligt, og det ville måske være en fordel for dig, hvis det er ikke klientkodens ansvar at fikse oprydningen.

Og ja - du kommer selv til at sørge for sorteringen (og selv vedligeholde asc/desc på sorteringen, hvis du ikke benytter dig af en datasource kontrol).

Mvh
Avatar billede simsen Mester
14. marts 2007 - 19:42 #4
Kunne ikke få det til at fungere.......så hun får bare ikke lov til at sortere :-(
Avatar billede snepnet Nybegynder
15. marts 2007 - 15:11 #5
Vil du have et eksempel med en object datasource og et par custom klasser?
(det bliver bare sådan et principielt eksempel).
Mvh
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