webForumDet fria alternativet

Selected i dropdown

7 svar · 344 visningar · startad av andreas_lindh

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#1

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

m_soderlundMedlem sedan sep. 20026 425 inlägg
#2

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
#3

Har du provat att binda din datagrid efter det att du sätter selectedindex på din dropdownlist?

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#4

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
#5

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
andreas_lindhMedlem sedan jan. 20011 140 inlägg
#6

nej. Jag har if not ispostback i page_load

NETworkMedlem sedan juni 20011 732 inlägg
#7

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)
andreas_lindhMedlem sedan jan. 20011 140 inlägg
#8

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
131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)