När jag vill redigera en länk på min sida så vill jag lista unika kategorier från en tabell i databasen där en massa länkar finns.
I en codebehind-sida som heter links.vb så har jag klassen edit_link som ärver UserControl. I denna klass har jag proceduren choose_cat som ska visa information i en dropdownlist på sidan, och dropdownlistan finns i edit.ascx.
Nu är det så att inga kategorier visas i dropdownlistan, inte ens de manuellt tillaggda listposterna "Välj" och det tomma utrymmet
finns med. Vad kan vara problemet? ddlBox måste ju vara tom på nåt sätt när jag anger den som datakälla till choose_cat.
Public Class edit_link : Inherits UserControl
protected withevents choose_cat as new dropdownlist
protected Withevents tbl_links_edit as repeater
Function fix(str)
str = Replace(str,"'","")
fix = str
End Function
Sub Page_Load(sender as object, e as eventargs)
choose_category()
edit()
End Sub
'lista kategorier
Sub choose_category()
'plocka ut unika kategorier ut länktabellen
Dim SQL As string = "SELECT DISTINCT Category FROM tbl_links"
Dim Cn As OleDbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & Server.MapPath("db_links.mdb"))
Dim Cm As OleDbCommand = new OleDbCommand(SQL,Cn)
Cn.Open()
'skapa ett OleDbDataReader-objekt
Dim objDataReader As OleDbDataReader = Cm.ExecuteReader()
[red]'skapa en ny samling av listposter (option-val i dropdownlistan i default.aspx)
Dim ddlBox As new ListItemCollection
'ddlBox.Add(new ListItem("Välj"))
'ddlBox.Add(new ListItem())
while(objDataReader.Read())
'lägg till val i kategoridropdownlistan
ddlBox.Add(new ListItem(objDataReader("category").toString()))
end while
'bind data till dropdownlistan
choose_cat.DataSource = ddlBox
choose_cat.DataBind()[/red]
'stäng objekt
objDataReader.Close()
Cn.Close()
End Sub
'redigera länk
Sub edit()
Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & Server.MapPath("db_links.mdb"))
Dim SQL As string = "SELECT url,sitedescription FROM tbl_links WHERE Id=" & fix(Request.Querystring("id"))
Dim Cm As New OleDbCommand(SQL,Cn)
Dim dbRead As OleDbDataReader
Dim Container As object
Cn.Open()
dbRead = Cm.ExecuteReader()
tbl_links_edit.DataSource = dbRead
tbl_links_edit.DataBind()
dbRead.Close()
Cn.Close()
End Sub
'utför redigering av länk
Sub performedit(sender as object,e as eventargs)
Dim eUrl As string = fix(Request.Form("url"))
Dim eDescription As string = fix(Request.Form("description"))
Dim eCategory As string = choose_cat.SelectedItem.toString
If eCategory = "" Then eCategory = fix(Request.Form("alt_category"))
Dim SQL As string = "UPDATE tbl_links SET URL='" & eURL & "',SiteDescription='" & eDescription & "',Category='" & eCategory & "' WHERE Id=" & fix(Request.Querystring("id"))
Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & Server.MapPath("db_links.mdb"))
Dim Cm As New OleDbCommand(SQL,Cn)
Cm.Connection.Open()
Cm.ExecuteNonQuery()
Cn.Close
Response.Redirect("default.aspx?action=edit&id=" & Request.Querystring("id") & "&cat=" & Request.Querystring("cat"))
End Sub
End Class
Problemet är löst, jag satte dropdownlistan i edit.ascx utanför Repeatern, och då fungerade det. Nu återstår bara att försöka få kategorivärdet i databasen för den länk jag ska redigera att vara markerat när man kommer till redigera-sidan.