2012-03-24 2 views
0

선택 변경시 업데이트 할 것으로 예상되는 데이터 그 룹에 목록 상자가 있지만 첫 번째 시도에는 없습니다. 게시 된 후에 만 ​​처음 클릭 한 후 의도 한대로 작동합니다. 어떤 도움을 주셔서 감사합니다.OnSelectedIndexChanged가 첫 번째 선택을하지 못하지만 이후 선택시 적용됩니다.

다음은 목록 상자가있는 DataGrid의 프런트 엔드 부분입니다.

여기
Protected Sub lstQtyUpdate(sender As Object, e As System.EventArgs) 
    Dim lb As New ListBox 
    lb = CType(sender, ListBox) 
    Dim thisID As String = lb.ClientID 
    Dim oiQty As Integer = ComFunctions.ConvertToInt(lb.SelectedItem.Value) 
    Dim oiID As Integer = 0 
    For Each item As DataGridItem In cartList.Items 
     lb = CType(item.FindControl("lstQty"), ListBox) 
     If (thisID = lb.ClientID) Then 
      oiID = ComFunctions.ConvertToInt(item.Cells(0).Text) 
      Exit For 
     End If 
    Next..... 

될 수있는, 상기 데이터 그리드에 대한 결합이다 :이 onselectedindexchanged 불려 부이다

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Try 
     If Not IsPostBack Then 
      LoadCart() 
      cartList.Columns(0).Visible = False 
      If (cartList.Items.Count = 0) Then 
       cartList.Visible = False 
       lblEmptyMsg.Visible = True 
      Else 
       cartList.Visible = True 
       lblEmptyMsg.Visible = False 
      End If 
     End If 
    Catch ex As Exception 
     Errorlog(ex, "Cart.Page_Load()") 
    End Try 
End Sub 

: 여기

<asp:TemplateColumn HeaderText="Qty"> 
       <ItemStyle HorizontalAlign="Center" Wrap="False" CssClass="grid" /> 
       <HeaderStyle HorizontalAlign="Center" ForeColor="Black" Font-Bold="true" CssClass="grid" width="30" /> 
       <ItemTemplate> 
        <asp:ListBox ID="lstQty" rows="1" runat="server" AutoPostBack="True" EnableViewState="True" OnSelectedIndexChanged="lstQtyUpdate" /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 

페이지로드 섹션 그 범인.

Private Sub cartList_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles cartList.ItemDataBound 
    Try 
     Dim rbd As ImageButton 
     Dim lst As ListBox 
     Dim id As Integer = 0 
     Dim evTitle As String = String.Empty 
     Dim evImage As String = String.Empty 
     Dim capacity As Integer = 0 
     Dim soldseats As Integer = 0 
     Dim seatsleft As Integer = 0 
     Dim evdate As String = String.Empty 
     Dim evtimestart As String = String.Empty 
     Dim evtimeend As String = String.Empty 
     Dim EditLink As String = String.Empty 
     Dim DeletedLink As String = String.Empty 
     If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then 
      id = DataBinder.Eval(e.Item.DataItem, "oi_id") 
      evTitle = ComFunctions.ConvertToStr(DataBinder.Eval(e.Item.DataItem, "title")) 
      evImage = ComFunctions.ConvertToStr(DataBinder.Eval(e.Item.DataItem, "image")) 
      evdate = ComFunctions.ConvertToDate(DataBinder.Eval(e.Item.DataItem, "eventsdatestart")) 
      capacity = ComFunctions.ConvertToStr(DataBinder.Eval(e.Item.DataItem, "capacity")) 
      seatsleft = (capacity - soldseats) 
      evtimestart = ComFunctions.Format_Time((DataBinder.Eval(e.Item.DataItem, "eventsdatestart"))) 
      evtimeend = ComFunctions.Format_Time((DataBinder.Eval(e.Item.DataItem, "eventsdateend"))) 
      Dim obj_DATA_Capacity As New DATA_Events() 
      soldseats = obj_DATA_Capacity.GetSeatsSold(id) 
      e.Item.Cells(0).Text = id 
      e.Item.Cells(1).Text = evTitle & "<br />" & evdate & " " & evtimestart & " - " & evtimeend 
      e.Item.Cells(2).Text = "<img src=""" & AppSettings("Events_ImagePath") & "/Thumb/" & evImage & """ width=""100"" />" 
      e.Item.Cells(3).Text = "$" & ComFunctions.ConvertToDecimal(DataBinder.Eval(e.Item.DataItem, "oi_price"), 2) 
      lst = CType(e.Item.FindControl("lstQty"), ListBox) 
      If seatsleft > 0 Then 
       'lst.Items.Add(0) 
       For I = 1 To seatsleft 
        lst.Items.Add(I) 
       Next 
      End If 
      lst.ID = id 
      lst.SelectedValue = ComFunctions.ConvertToInt(DataBinder.Eval(e.Item.DataItem, "oi_qty")) 
      rbd = CType(e.Item.FindControl("DeleteThis"), ImageButton) 
      rbd.CommandArgument = id 
     End If 

    Catch ex As Exception 
     Errorlog(ex, "quickCart.cartList_ItemDataBound()") 
    End Try 
End Sub 

답변

0

나는 그것이 그런데, 처음 작동하지 않는 이유를 모르겠어요, 무슨 "작동하지 않습니다"실제로 의미? 하지만 그 외에도 현재 DataGridItem에서 첫 번째 셀의 텍스트를 가져 오는 길은 이상합니다.

이 훨씬 더 직접적이다 :

Dim lb = DirectCast(sender, ListBox) 
Dim item = DirectCast(lb.NamingContainer, DataGridItem) 
Dim oiID = Int32.Parse(item.Cells(0).Text) 

는 어쩌면 그것은 또한 작업을 얻을 수 있습니다.

+0

확실히 더 직접적이며 많은 감사를드립니다. 그래도 여전히 문제가 있지만 더 명확하게 설명하겠습니다. 목록 상자의 선택을 변경하면 페이지가 OnSelectedIndexChanged에 대한 하위를 호출하는 것처럼 깜박이지만 페이지로드시 원래 값으로 재설정됩니다. 다시 선택을하면 페이지 깜박임없이 제대로 업데이트됩니다. 또한 빈 서브를 호출하는 버튼을 추가하여 실험했습니다. 해당 버튼을 클릭하면 페이지가 깜박이고 listbox는 예상대로 작동합니다. 물론 – mbmemb

+0

버튼을 클릭하는 것은 적합하지 않습니다. 왜 그것이 독자적으로 작동하지 않는지 확신 할 수 없습니다. 기발한 다른 컨트롤, 버튼, 데이터 격자와 상호 작용하지 잘 작동합니다. – mbmemb

+0

'ItemDataBound'에서 왜'DataBinder.Eval'을 사용하는지 이해할 수 없습니다. e.Item.DataItem을 통해 직접 기본 DataSource를 사용할 수 있습니다. –

관련 문제