Du kan ikke læse fra din reader to gange på den måde.
Mvh
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
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å....?
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
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?!
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
Hvad gør BindGrid(null);/BindGrid(Nothing) helt nøjagtigt?
Kalder bare uden sortExpression.
Mvh
Vil du give et svar, så denne kan blive lukket?
Et svar får du her :o)
Mvh