Avatar billede Kim Neesgaard Seniormester
19. september 2006 - 15:13 Der er 9 kommentarer og
1 løsning

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?
Avatar billede snepnet Nybegynder
19. september 2006 - 15:17 #1
Du kan ikke læse fra din reader to gange på den måde.
Mvh
Avatar billede snepnet Nybegynder
19. september 2006 - 15:19 #2
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
Avatar billede Kim Neesgaard Seniormester
27. september 2006 - 14:32 #3
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å....?
Avatar billede snepnet Nybegynder
09. oktober 2006 - 00:52 #4
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
Avatar billede Kim Neesgaard Seniormester
09. oktober 2006 - 18:04 #5
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?!
Avatar billede snepnet Nybegynder
10. oktober 2006 - 14:18 #6
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
Avatar billede Kim Neesgaard Seniormester
19. oktober 2006 - 12:47 #7
Hvad gør BindGrid(null);/BindGrid(Nothing) helt nøjagtigt?
Avatar billede snepnet Nybegynder
22. oktober 2006 - 21:36 #8
Kalder bare uden sortExpression.
Mvh
Avatar billede Kim Neesgaard Seniormester
13. juli 2007 - 13:17 #9
Vil du give et svar, så denne kan blive lukket?
Avatar billede snepnet Nybegynder
13. juli 2007 - 13:37 #10
Et svar får du her :o)
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



IT-JOB

Metro Service A/S

Risk & Cyber Security Expert

Udviklings- og Forenklingsstyrelsen

Business Analyst til samfundskritiske IT-projekter

Cognizant Technology Solutions Denmark ApS

Senior Delivery Manager