Jag har en dropdown i en edittemplate som jag vill fylla med värden från en access databas. Men dropdownen blir tom
Public Sub datagrid1_edit(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
datagrid1.EditItemIndex = e.Item.ItemIndex
filldata()
datagrid1.DataBind()
End Sub
Public Sub filldata()
Dim dpllag_a As DropDownList = New DropDownList()
Dim dpllag_b As DropDownList = New DropDownList()
Dim objcmd1 As New OleDbDataAdapter _
("select Namn, Id from deltagande_lag where Cup_id=" & viewstate("c_id") & " order by id", objconn)
Dim ds1 As DataSet = New DataSet()
objcmd1.Fill(ds1, "deltagande_lag")
dpllag_a.DataSource = ds1.Tables("deltagande_lag")
dpllag_a.DataBind()
dpllag_b.DataSource = ds1.Tables("deltagande_lag")
dpllag_b.DataBind()
End Sub
Kolla om du skickar rätt datatyp,
konverta "c_id" till int om det är en string och tvärtom. inte alls säker på att det är just det problemet du har men jag har råkat ut för det.
Eftersom du har din kontroll i en annan kontroll så gissar jag att du måste göra en findcontrol på din datagrid för att hitta din dropdownlist. Alternativt att du sätter datasource='funktion(värde)' i din ddl, alltså en funktion som returnerar giltig data att fylla den med...
Public Sub datagrid1_edit(ByVal obj As Object, ByVal e As DataGridCommandEventArgs)
Dim dpllaga As DropDownList = e.Item.FindControl("dpllaga")
Dim dpllagb As DropDownList = e.Item.FindControl("dpllagb")
datagrid1.EditItemIndex = e.Item.ItemIndex
Dim objcmd1 As New OleDbDataAdapter _
("select Namn, Id from Deltagande_lag where Cup_id=" & viewstate("c_id") & " order by id", objconn)
Dim ds1 As DataSet = New DataSet()
objcmd1.Fill(ds1, "deltagandelag")
dpllaga.DataSource = ds1.Tables("deltagandelag"). _
DefaultView
dpllaga.DataBind()
dpllagb.DataSource = ds1.Tables("deltagandelag"). _
DefaultView
dpllagb.DataBind()
datagrid1.DataBind()
End Sub
Då får jag detta felmeddelandet
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 53: Dim ds1 As DataSet = New DataSet()
Line 54: objcmd1.Fill(ds1, "deltagandelag")
Line 55: dpllaga.DataSource = ds1.Tables("deltagandelag"). _
Line 56: DefaultView
Line 57: dpllaga.DataBind()
Source File: h:\inetpub\wwwroot\cup\spelschema.aspx.vb Line: 55
For i = 0 To dataGrid1.Items.Count - 1
dataGrid1.Items(i).FindControl("dpllaga").DataSource = ds1.Tables("deltagandelag")
dataGrid1.Items(i).FindControl("dpllagb").DataSource = ds1.Tables("deltagandelag")
Next
<edititemtemplate>
<asp:dropdownlist DataSource='<%# Function(DataBinder.Eval(Container, "DataItem.Data")) %>' Runat="server"></asp:dropdownlist>
</edititemtemplate>
//och sen en funktion:
protected datasource Function (object o) {
//vb-kod som jag inte kan...
return datasource
}
Public Function filldg()
Dim objcmd1 As New OleDbDataAdapter _
("select Namn, Id from Deltagande_lag where Cup_id=" & viewstate("c_id") & " order by id", objconn)
Dim ds1 As DataSet = New DataSet()
objcmd1.Fill(ds1, "deltagandelag")
Return ds1.Tables("deltagandelag")
End Function
En fråga till. Hur får jag "rätt" värde selected i dropdownen
Först tar du alltså ut det index (rad) i din datagrid d'är eventet inträffade, sedan kör du en findcontrol för att hitta kontrollen (kan även göras manuellt genom att ange i vilken kolumn din ddl finns) och därefter söker du på en given text i dropdownlisten och sätter den till selected = true. Någon som är bättre på vb än mig kanske kan ge ett fungerande vb-exempel?
Alternativt kanske du kan labba lite med attributet selectedindex i din dropdownlist och göra någon liknande funktion som du gjorde när du fyllde den?