07. november 2003 - 11:20Der er
39 kommentarer og 1 løsning
konvert label til textbox
hej til alle!
jeg har lavet en noget her og det virker OK! men istedet for at den læsser databasen ind i nogen labels kan jeg så ikke få den til at visse i textboxe istedet for ?
Jeg har set på din kode, og det ser ud som om at vi vil lave noget kundekartotek af en art, og ønsker at man skal kunne redigere i oplysningerne. Er det korrekt?
min plan er at hver felt i min database skal loades ind i forskellige teksbox. så det mening når jeg ændre noget i et af textbox'en skal jeg bare trykke på et knap der hedder "gem" så skal den bare gemme det hele i databasen.
ahhh nu ved jeg ikke hvorbevidst din løsning er lavet, men normalt laver man dette som så: Læser hele databasen ind i en datalist/datagrid og ikke en repeater. (hvis jeg var dig ville jeg helt sikkert vælge datagrid) Placerer nogle knapper: rediger, opdater osv. Så når du klikker på én af dem bliver felterne lavet om til tekstboxe, som du kan editere i. Det lyder kompliceret men er ret let. Hvilket program bruger du?
' TODO: update the ConnectionString and Command values for your application
Dim ConnectionString As String = "server=(local);database=pubs;trusted_connection=true" Dim SelectCommand As String = "SELECT au_id, au_lname, au_fname from Authors"
Dim isEditing As Boolean = False
Sub Page_Load(Sender As Object, E As EventArgs)
If Not Page.IsPostBack Then
' Databind the data grid on the first request only ' (on postback, bind only in editing, paging and sorting commands)
Sub DataGrid_ItemCommand(Sender As Object, E As DataGridCommandEventArgs)
' this event fires prior to all of the other commands ' use it to provide a more graceful transition out of edit mode
CheckIsEditing(e.CommandName)
End Sub
Sub CheckIsEditing(commandName As String)
If DataGrid1.EditItemIndex <> -1 Then
' we are currently editing a row If commandName <> "Cancel" And commandName <> "Update" Then
' user's edit changes (If any) will not be committed Message.Text = "Your changes have not been saved yet. Please press update to save your changes, or cancel to discard your changes, before selecting another item." isEditing = True
End If
End If
End Sub
Sub DataGrid_Edit(Sender As Object, E As DataGridCommandEventArgs)
Sub DataGrid_Update(Sender As Object, E As DataGridCommandEventArgs)
' update the database with the new values
' get the edit text boxes Dim id As String = CType(e.Item.Cells(2).Controls(0), TextBox).Text Dim lname As String = CType(e.Item.Cells(3).Controls(0), TextBox).Text Dim fname As String = CType(e.Item.Cells(4).Controls(0), TextBox).Text
' TODO: update the Command value for your application Dim myConnection As New SqlConnection(ConnectionString) Dim UpdateCommand As SqlCommand = new SqlCommand() UpdateCommand.Connection = myConnection
If AddingNew = True Then UpdateCommand.CommandText = "INSERT INTO authors(au_id, au_lname, au_fname, contract) VALUES (@au_id, @au_lname, @au_fname, 0)" Else UpdateCommand.CommandText = "UPDATE authors SET au_lname = @au_lname, au_fname = @au_fname WHERE au_id = @au_id" End If
' execute the command Try myConnection.Open() UpdateCommand.ExecuteNonQuery()
Catch ex as Exception Message.Text = ex.ToString()
Finally myConnection.Close()
End Try
' Resort the grid for new records If AddingNew = True Then DataGrid1.CurrentPageIndex = 0 AddingNew = false End If
' rebind the grid DataGrid1.EditItemIndex = -1 BindGrid()
End Sub
Sub DataGrid_Cancel(Sender As Object, E As DataGridCommandEventArgs)
' cancel editing
DataGrid1.EditItemIndex = -1 BindGrid()
AddingNew = False
End Sub
Sub DataGrid_Delete(Sender As Object, E As DataGridCommandEventArgs)
' delete the selected row
If Not isEditing Then
' the key value for this row is in the DataKeys collection Dim keyValue As String = CStr(DataGrid1.DataKeys(e.Item.ItemIndex))
' TODO: update the Command value for your application Dim myConnection As New SqlConnection(ConnectionString) Dim DeleteCommand As New SqlCommand("DELETE from authors where au_id='" & keyValue & "'", myConnection)
' execute the command myConnection.Open() DeleteCommand.ExecuteNonQuery() myConnection.Close()
Dim ConnectionString As String = "server=(local);database=pubs;trusted_connection=true" Dim SelectCommand As String = "SELECT au_id, au_lname, au_fname from Authors"
skal udskiftes ligesom du skal lægge din OLEDB kode ind istedet for sqlserver (da jeg ikke kan kode Vb men kun C# kan jeg desværre ikke lave det for dig)
<asp:Label id="tFornavn" runat="server" /> istedet for <%#Container.DataItem("fornavn")%>
også i page_onload
tilføjer du
tFornavn.text = Container.DataItem("fornavn")
-------------------------------- Hvis det ik var en label du skulle bruge ændre du det bare. Jeg er ny inden for ASP.NET men kan det ikke gøres som jeg beskriver det?
Nopes, for problemet er at man ikke kan vide hvor mange poster som skal skrives. Hvis du f.eks. vidste at der var 7 (hverken flere eller færre) så kunne man godt, men hvor gøre det når .NET går arbejder for dig? :-)
repsak>> det kommer vel helt og aldeles an på hvad det er han vil... selv vil jeg da mene at et datagrid er noget overkill... især hvis man har mange felter, da det så ender med den er noget bred.
cyberfessor -> Jeg er ikke enig med dig... selvfølgelig kan den blive bred, men det er jo blot et spørgsmål og at designe sin side/program smart nok... Hvis der SKAL være mange oplysninger er det jo lige meget om han gør det på din eller min måde
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.