Jag har en dropdown i en datagrid.
När jag kör en insert med värdet från datagriden vill jag att det värde man valt ska vara selected i dropdownen.
Jag har provat med det här men inte fått det att fungera
Private Sub bindgrid()
Dim matchID As Integer = viewstate("match")
Dim objBusinessL As New AdminLiveBusinessL()
Dim ds As DataSet = objBusinessL.GetsGame(matchID)
dgmatcher.DataSource = ds
dgmatcher.DataBind()
End Sub
Public Sub UpdateResultat(ByVal sender As Object, ByVal e As EventArgs)
Dim griditem As DataGridItem
Dim mydropdown As DropDownList
Dim period As String
For Each griditem In dgmatcher.Items
Dim resA As Integer = CInt(CType(griditem.FindControl("tbResa"), TextBox).Text)
Dim resB As Integer = CInt(CType(griditem.FindControl("tbResb"), TextBox).Text)
Dim id As Integer = CInt(CType(griditem.FindControl("lblID"), Label).Text)
period = CType(griditem.FindControl("ddlPeriod"), DropDownList).SelectedItem.Value
mydropdown = CType(griditem.FindControl("ddlPeriod"), DropDownList)
Dim objBusinessL As New AdminLiveBusinessL()
objBusinessL.updateResultat(id, resA, resB, period)
Next
bindgrid()
mydropdown.SelectedIndex = mydropdown.Items.IndexOf(mydropdown.Items.FindByValue(period))
End Sub
Dropdownen ser ut så här
<asp:dropdownlist id="ddlPeriod" runat="server">
<asp:listitem value="0">Match ej startad</asp:listitem>
<asp:listitem value="1">1</asp:listitem>
<asp:listitem value="2">2</asp:listitem>
<asp:listitem value="3">3</asp:listitem>
<asp:listitem value="4">Sudden death</asp:listitem>
<asp:listitem value="5">Slut</asp:listitem>
</asp:dropdownlist>
Tar jag bort bindgrid() blir rätt värde valt men då fungerar inte inserten
Har du provat med att sätta dit AutoPostBack="True"?
<asp:dropdownlist id="ddlPeriod" AutoPostBack="True" runat="server">
NETworkMedlem sedan juni 20011 732 inlägg Har du provat att binda din datagrid efter det att du sätter selectedindex på din dropdownlist?
NETwork skrev:
Har du provat att binda din datagrid efter det att du sätter selectedindex på din dropdownlist?
Ja. Det fungerar inte heller. Det första alternativt i dropdownlisten bli valt hela tiden
Har du provat med att sätta dit AutoPostBack="True"?
Nej. Jag har en knapp för att göra inserten så jag vill inte att den postas automatiskt.
DinoMedlem sedan sep. 20011 914 inlägg Du har möjligtvis inte satt.
sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
bindgrid()
end sub
istället för
sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
if not ispostback then
bindgrid()
end if
end sub
nej. Jag har if not ispostback i page_load
NETworkMedlem sedan juni 20011 732 inlägg Din dropdownlist finns alltså i din datagrid och du vill bara sätta selectedindex på den ddl som är på den rad du nyss uppdaterat? Eftersom du sätter mydropdown = CType(griditem.FindControl("ddlPeriod"), DropDownList) i en loop så är den inte giltig utanför loopen, du måste alltså leta rätt på kontrollen med findcontrol på den rad i datagriden där du ska uppdatera den utanför loopen.
Alltså, för att illustrera felet jag tror att du har gjort:
FEL:
for each blah blah
string a = "a"
}
Response.Write(a)
RÄTT:
string a = ""
for each blah blah
a = "a"
}
Response.Write(a)
Jag löste det med en onitemdatabound på datagriden och så la jag till en textbox bredvid dropdownen som jag hämtar värdet ifrån.
Public Sub dgmatcher_databound(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
Dim mytextbox As TextBox
mytextbox = e.Item.FindControl("tbMPer")
Dim per As Integer = CInt(mytextbox.Text)
Dim mydropdown As DropDownList
mydropdown = e.Item.FindControl("ddlPeriod")
mydropdown.SelectedIndex = mydropdown.Items.IndexOf(mydropdown.Items.FindByValue(per))
End If
End Sub