Oprettet tir. d. 19. september 2006 kl. 15:13:15

neesgaard
neesgaard (9.945 point. Point ude: 130)

DataGrid 'slukker' ved brug af EditItemIndex

Jeg har et DataGrid, der får værdier ved følgende:

Dim ReaderPartOfSystem As Data.OleDb.OleDbDataReader

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim strSQL As String
  strSQL = "SELECT PartOfSystemText, Sort FROM tblPartOfSystem ORDER BY Sort"

Try
  ReaderPartOfSystem = DB.Sel(strSQL)
  dgPartOfSystem.DataSource = ReaderPartOfSystem
  dgPartOfSystem.DataBind()
Catch
  lblInfo.Text = Err.Description
End Try
End Sub

DB.Sel (strSQL)returnerer et recordset.

Men når jeg bruger dette, så slukker al indhold i DataGriddet:

Sub grid_EditCommand(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
  dgPartOfSystem.EditItemIndex = e.Item.ItemIndex
  dgPartOfSystem.DataSource = ReaderPartOfSystem
  dgPartOfSystem.DataBind()
End Sub

I tags er der dette:

OnEditCommand="grid_EditCommand"

Hvorfor mon det?

Skrevet tir. d. 19. september 2006 kl. 15:17:35| #1

snepnet
snepnet (87.110 point)
Du kan ikke læse fra din reader to gange på den måde.
Mvh

Skrevet tir. d. 19. september 2006 kl. 15:19:37| #2

snepnet
snepnet (87.110 point)
Du benytter den samme reader til at databinde til i både page_load og i din handler... Men når du når din handler er readeren jo "brugt op".
Lav en metode der ved bruge af en reader fylder dit dataset, og kald i page_load hvis der ikke er tale om et postback, og derudover i alle de handlere hvor der sker noget med grid'et.
Mvh

Skrevet ons. d. 27. september 2006 kl. 14:32:01| #3

neesgaard
neesgaard (9.945 point)
Nu har jeg (endelig fået tid) lavet denne:

Function LookupUpdate(ByVal TableName As String, ByVal Field As String, ByVal dg As DataGrid) As Boolean

Dim strSQL As String
Dim Reader As Data.OleDb.OleDbDataReader
strSQL = "SELECT " & Field & ", Sort FROM " & TableName & " ORDER BY Sort"
       
Try
  Reader = DB.Sel(strSQL)  'Returnerer en reader
  dg.DataSource = Reader
  dg.DataBind()
  Reader.Close()
  Return True
Catch
  Return False
End Try
End Function

og starter med:

If Not IsPostBack Then
  LookupUpdate("tblPartOfSystem", "PartOfSystemText", dgPartOfSystem)
End If

og det virker.

Men jeg kan ikke få den til at editere - jeg forsøger mig med:

Sub grid_EditCommand(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
  dgPartOfSystem.EditItemIndex = e.Item.ItemIndex
  dgPartOfSystem.DataSource = UpdateGrid("tblPartOfSystem", "PartOfSystemText")  'Returnerer en reader
  dgPartOfSystem.DataBind()
End Sub

men den åbner blot for Update/Cancel link, men giver ikke adgang til at redigere i feltet? Det er nok ikke måden at gøre det på....?

Skrevet man. d. 09. oktober 2006 kl. 00:52:10| #4

snepnet
snepnet (87.110 point)
Det er ikke lige til at se hvad der foregår - Hvad gør UpdateGrid? og hvorfor bruger du ikke samme funktion til databinding hver gang?
Mvh

Skrevet man. d. 09. oktober 2006 kl. 18:04:49| #5

neesgaard
neesgaard (9.945 point)
UpdateGrid er en funktion, der returnerer en datareader og de returnerede data afhænger så af, hvilken tabel men med første parameteren giver den. Jeg bør selvfølgelig bruge samme funktion. Men min tvivl gik på, om det er rigtigt at tage følgenede trin efter hinanden:

1/ Dette går jeg ud fra, giver datagriddet besked om at linien men nu klikker på, skal åbne sig og gå i edit-tilstand
dgPartOfSystem.EditItemIndex = e.Item.ItemIndex

2/ Kan man herefter tildele griddet en source?
dgPartOfSystem.DataSource = UpdateGrid("tblPartOfSystem", "PartOfSystemText")  'Returnerer en reader

3/ Kan man så lave DataBind() tilsidst og herved åbne en linie, der kan editeres?

Jeg har kraftigt på fornemmelsen, at jeg ikke helt har forstået konceptet i dette?!

Skrevet tir. d. 10. oktober 2006 kl. 14:18:14| #6

snepnet
snepnet (87.110 point)
Du bør have en konstruktion som denne her:
Nu har jeg bare brugt et sorteringsudtryk som parameter til BindGrid-metoden... Men der kan du jo så have andet der er relevant at sætte på.

protected void Page_Load(object sender, EventArgs e)
{
    // håndtering af databinding
    if (!IsPostBack)
    {
        BindGrid(null);
    }
}

// databinding
private void BindGrid(string sortExpression)
{
    if (sortExpression != null)
        grid.DataSource = PersonAccess.GetAllPersons(sortExpression);
    else
        grid.DataSource = PersonAccess.GetAllPersons();       
   
    grid.DataBind();
}

// ved editering - databinding
protected void grid_EditCommand(object source, DataGridCommandEventArgs e)
{
    grid.EditItemIndex = e.Item.ItemIndex;
    // databind
    BindGrid(null);
}

Mvh

Skrevet tor. d. 19. oktober 2006 kl. 12:47:59| #7

neesgaard
neesgaard (9.945 point)
Hvad gør BindGrid(null);/BindGrid(Nothing) helt nøjagtigt?

Skrevet søn. d. 22. oktober 2006 kl. 21:36:53| #8

snepnet
snepnet (87.110 point)
Kalder bare uden sortExpression.
Mvh

Skrevet fre. d. 13. juli 2007 kl. 13:17:04| #9

neesgaard
neesgaard (9.945 point)
Vil du give et svar, så denne kan blive lukket?

Skrevet fre. d. 13. juli 2007 kl. 13:37:57| #10

snepnet
snepnet (87.110 point)
Et svar får du her :o)
Mvh

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

GridView og RowCommand

Oprettet den 22. maj 2012 kl. 17.34
faran giver 30 point for svar | Giv et svar »

Flere betingelser i repeater.

Oprettet den 15. maj 2012 kl. 21.45
fuldstop giver 60 point for svar | Giv et svar »

kombinere code behind og Javascript

Oprettet den 6. maj 2012 kl. 09.02
tjacob giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger