Hej Jeg kæmper med en website application i Visual Studio 2005. Jeg har et gridview som viser nogle rækker, som er bundet til et dataview. Mit dataview filtrerer et datatable, efter nogle brugerdefinerede filtreringer. Jeg har fx en kalenderkontrol, og gridviewt skal filtrere efter hvilken dato der er valgt i kalenderen.
Jeg har et problem, at filtreringen sker fint fra kalenderen til gridviewet, men når der så vælges en row i gridviewet så genloades siden, og filtreringen nulstilles.
Meningen er at nogle tekstbokse skal vise valget fra gridviewet. Hvordan kan jeg beholde mit filter efter postback, efter at en række er valgt i gridviewet? (Eller mere konkret, hvore hvordan kan jeg sørge for at de rigtige felter vises i tekstboksene, og at siden ikke reloades efter at der er klikket på en række?)
List af min kode: protected void Page_Load(object sender, EventArgs e) {
MakeTables();
MakeDataView(); //Lav et rowfilter. Til start vil gerne have vist data fra dd og 7 dage frem. Changedv(DateTime.Today, DateTime.Today.AddDays(7));
mangler der ikke en If (!IsPostBack) i din page load ? I den blok skal du "loade" din side (som du gør nu), så data gemmes i kontrollernes viewstate, og ikke ændres efter postback, mens ændringer skal så normalt gennemføres i de klik-handlere dine klik-events forårsager.
Når du klikker og får postback, så starter hele balladen forfra - intet er husket fra forrige gang.
Når du klikker på noget på skærmen laver du en event som du kan kalde handleren for efter postback. Det gør du øjensynligt allerede da du får fejl i Changedv ? Hvor bliver den kaldt fra ?
Efter postback har du ingen DataTable, fordi den kun blev loadet ved !IsPostBack. Hvis du har en myGridView_SelectedIndexChanged eventhandler så skal du derinde loade din table igen og lave dit dataview. Det fremgår ikke af din kode hvor du har data fra - hvis fra en DB, så kunne du opbevare dine data i session, så du kan lirke dem frem igen derfra uden at kalde db'en.
Jeg har pastet min kode ind herunder. Der kommer nu en fejl når jeg klikker på kalenderen i linje : "dv.Table = Tour9DataSet.Tables["dtTours"];" Object reference not set to an instance of an object.
Underligt.. Jeg må kigge lidt på session, eller hvad? Hvis jeg kan gemme min datatabel og måske mit dataview i en session, kan jeg nok få det til at virke. Er det vejen?
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using localhost;
public partial class Forside : System.Web.UI.Page { Service1 MyWebService; DataSet Tour9DataSet; DataView dv;
// Copy the items in the Rows collection into an array. GridViewRow[] rowArray = new GridViewRow[GridViewTours.Rows.Count]; GridViewTours.Rows.CopyTo(rowArray, 0);
// Iterate though the array and display the value in the selected cell. int j = -1;
foreach (GridViewRow row in rowArray) { j++; if (j == GridViewTours.SelectedIndex) { Input.Text = row.Cells[1].Text; } }
jas det er vejen gem dine ting i session - hvis du ikke ved hvordan så skriv det, så kan jeg elelr en anden hjælpe dig, ellers blqard lige ned igennem spørgsmålene på denne (og næste side) der er andre som bruger session til at gemme ting
Synes godt om
Ny brugerNybegynder
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.