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
Och så här skriver jag dropdownlisten
<asp:dropdownlist id="dpllag_a" width="120" runat="server" visible="True" DataTextField="Namn" DataValueField="id" />
hur gör jag för att kolla om värdet i datgriden är samma som den i dropdownen och gör så att den blir selected?
LeffoMedlem sedan juni 200239 inlägg 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.
Tack för tipset men tyvärr så hjälpte inte det
NETworkMedlem sedan juni 20011 732 inlägg 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...
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.
Hur gör jag det? Gör jag likadant som när jag hittar textboxar i en datagrid?
Ja, precis på samma sätt oavsett vad det är för kontroll som ligger i en datagrid.
jag testade med det här
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
Prova detta:
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
jag provade med det men får då
'DataSource' is not a member of 'System.Web.UI.Control'.
på dataGrid1.Items(i).FindControl("dpllaga").DataSource = ds1.Tables("deltagandelag")
NETworkMedlem sedan juni 20011 732 inlägg Vet inte hur det är i vb, men i c# så måste du även skriva vilken typ av object det är:
((DropDownList)dataGrid1.Items(i).FindControl("dpllaga")).DataSource
Sen vet du ju vilket index det är som startat eventet med e.Item.ItemIndex så du behöver inte loopa igenom hela datagriden!
Jag testade med det här
CType(e.Item.FindControl("dpllaga"), DropDownList).DataSource = ds1.Tables("deltagandelag")
Men får då återigen felet
Object reference not set to an instance of an object.
Source Error:
Line 52: objcmd1.Fill(ds1, "deltagandelag")
Line 53:
Line 54: CType(e.Item.FindControl("dpllaga"), DropDownList).DataSource = ds1.Tables("deltagandelag")
Line 55: CType(e.Item.FindControl("dpllagb"), DropDownList).DataSource = ds1.Tables("deltagandelag")
Line 56: dpllaga.DataBind()
Source File: h:\inetpub\wwwroot\cup\spelschema.aspx.vb Line: 54
NETworkMedlem sedan juni 20011 732 inlägg Du måste nog fortfarande göra din findcontrol på din datagrid alltså, nåt sånt här:
.....dataGrid1.Items(e.Item.ItemIndex).FindControl.....
blir fortfarande samma fel
NETworkMedlem sedan juni 20011 732 inlägg Hm, vi tar den enkla varianten istället. :)
<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
}
Ja, nåt sånt borde funka...
Tack. Nu fungerar det.
Här är funktionen
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
NETworkMedlem sedan juni 20011 732 inlägg
andreas_lindh skrev:
Tack. Nu fungerar det.
En fråga till. Hur får jag "rätt" värde selected i dropdownen
Jadu, då behöver du antagligen få tag på din dropdownlist i alla fall. Jag är tyvärr en sopa på vb men det ska fungera att göra nåt i den här stilen:
((DropDownList)DataGrid1.Items[e.Item.ItemIndex].FindControl("myDropDownList")).Items.FindByText("text").Selected = bool;
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?
NETworkMedlem sedan juni 20011 732 inlägg Titta i den här tråden längst ned, Dino har hittat en smidig lösning på ditt problem! :)
http://www.webforum.nu/showthread.php?s=&threadid=64918