none
Paging bei dynamisch erstellten Tabellen RRS feed

  • Frage

  • Hallo zusammen,
    HAbe folgendes Problem. Ich baue mir eine Table in der Codebehind-Datei eines WebForms auf. So weit so gut. Nun soll diese Tabelle (da sehr viele Datensätze zu erwarten sind) eine Möglichkeit bekommen, dass man eine Art Paging vornehmen kann. Sprich: die ersten 3 Datensätze aus in der Tabelle anzeigen (zwei Buttons unten drunter im Footer der Tabelle) mit Vor und zurück und dann eben die nächsten bzw die Datensätze anzeigen die davor dran waren.

    Ich erstelle also zwei Buttons und weise diesen nen Eventhandler zu. In diesem EventHandler wird eine SessionVariable um 3 erhöht oder vermindert. Mit dieser SesssionVariable setzte ich den OleDbDataReader um eine gewissen Anzahl von Datensätzen nach vorn.

    Eigentliche Problem:

    1) Aufruf
    • Seite wird Komplett geladen
    • ertsen 3  Datensätze sind in der Tabelle zu sehen
    • Footer erstellt, mit Buttons zum anklicken
    2) Aufruf nach btn_click
    • Seite wird wieder erst Komplett geladen
    • Tabellen wird erstellt
    • am ende des Ladevorgangs wird endlich der Eventhandler aufgerufen in welchem die Session um 3 erhöht wird. Nur dann ist es zu spät und der neue wert gilt erst wenn man wieder auf nen Button klickt.
    Also hat man ein Problem wenn man auf vor klickt, die Seite neu lädt, und dann auf zurück klickt, dann wird beim Sietenaufbau natürlich noch auf den alten wert zurückgegriffen und die nächsten 3 datensätze werden angezeigt, obwohl die Letzten 3 hätten angezeigt werden sollen..

    Konnte mir heir jemand folgen?


    Hier der Code der den ganzen mist verzapft, brauche Lösungsideen oder Vorschläge wei man einen Pager für eine Tabelle anders umsetzen kann.

    protected void Page_Load(object sender, EventArgs e)
        {
            Table UrlaubTable = TabelleErstellen();
            UrlaubTable = Tabellenkopf(UrlaubTable);
            if (!IsPostBack)
            {
              
                UrlaubTable = TabellenDaten(UrlaubTable, -3);
            }
            else
            {
               
                UrlaubTable = TabellenDaten(UrlaubTable, Convert.ToInt32(Session["nächsten"]));
            }
            UrlaubTable = TabellenFooter(UrlaubTable);
            form1.Controls.Add(UrlaubTable);
        }
        private Table TabelleErstellen()
        {
            Table dummyTable = new Table();
            dummyTable.Font.Size = FontUnit.Point(9);
            dummyTable.ID = "DienstreiseTabelle";
            return dummyTable;
        }
        private Table Tabellenkopf(Table dummyTable)
        {
            TableHeaderRow Header = new TableHeaderRow();
            Header.BackColor = System.Drawing.Color.Tan;
            ArrayList al = new ArrayList();
            al.Add("Nr.");
            al.Add("Antragstellung");
            al.Add("Urlaub von");
            al.Add("Urlaub Bis");
            al.Add("Status");
            al.Add("Bearbeitung");
            al.Add("Bemerkung");
            for (int i = 0; i < al.Count; i++)
            {
                TableHeaderCell headercell = new TableHeaderCell();
                headercell.Text = al[i ] .ToString();
                Header.Cells.Add(headercell);
            }
            dummyTable.Rows.Add(Header);
            return dummyTable;
        }
        private Table TabellenDaten(Table dummyTable, int zähler)
        {
            int farbe = 0;
            DatenBank db = new DatenBank();
            #region SQL für Hauptdatensätze
            string sql = ""; --> ist in diesem Fall egal
            #endregion
            OleDbDataReader StammReader = db.ReaderSelect(sql);
     //setzt Reader um x zeilen nach vorn um an die gewünschten Daten ran zu kommen     
     for (int DatenZeile = 0; DatenZeile < 3 + Convert.ToInt32(Session["nächsten"])+zähler; DatenZeile++)
            {
                StammReader.Read();
            }
            for (int DatenZeile = 0; DatenZeile < 3; DatenZeile++)
            {
                StammReader.Read();
                #region Farbe bestimmen
                farbe++;
                TableRow tr = new TableRow();
                if (farbe % 2 == 0)
                    tr.BackColor = System.Drawing.Color.LightGoldenrodYellow;
                else
                    tr.BackColor = System.Drawing.Color.PaleGoldenrod;
                #endregion
                #region Hauptdatensätze
                for (int f = 0; f < 7; f++)
                {
                    TableCell td = new TableCell();
                    td.Text = (StammReader.GetValue(f).ToString());
                    tr.Cells.Add(td);
                }
                dummyTable.Rows.Add(tr);
                #endregion
               

            }
            db.close();
            StammReader.Close();
            return dummyTable;

        }
        private Table TabellenFooter(Table dummyTable)
        {
            TableFooterRow tr_footer = new TableFooterRow();
            tr_footer.BackColor = System.Drawing.Color.Tan;
            TableCell td_footer1 = new TableCell();
            td_footer1.ColumnSpan = 6;
            TableCell td_footer2 = new TableCell();
            Button btn = new Button();
            btn.Text = "vor";
            form1.Controls.Add(btn);
            btn.Command += new CommandEventHandler(btn_Command);
            Button btnZurück = new Button();
            btnZurück.Text = "Zurück";
            btnZurück.Command += new CommandEventHandler(btnZurück_Command);
            td_footer1.Controls.Add(btnZurück);
            td_footer1.HorizontalAlign = HorizontalAlign.Right;
            td_footer2.Controls.Add(btn);
            td_footer1.Font.Bold = true;
            td_footer2.Font.Bold = true;
            tr_footer.Cells.Add(td_footer1);
            tr_footer.Cells.Add(td_footer2);
            dummyTable.Rows.Add(tr_footer);
            return dummyTable;
        }

        void btnZurück_Command(object sender, CommandEventArgs e)
        {
            Session.Add("nächsten", Convert.ToInt32(Session["nächsten"]) -3);
        }
        void btn_Command(object sender, CommandEventArgs e)
        {
            Session.Add("nächsten", Convert.ToInt32(Session["nächsten"]) + 3);
        }
    Sonntag, 26. November 2006 11:16