2011-05-06 13 views
5

Bir süredir bunun için bir çözüm arıyordum ve bana nasıl yapılacağını gösteren birçok gönderi gördüm, ancak yine de SelectedIndexChanged olayımı DropDownList değiştirildiğinde yanmam mümkün değil.DropDownList SelectedIndexGridview içinde değişiklik yapmadı!

DropDownList AutoPostBack True olarak ayarlanırsa

, ben de aşağıda yazı kodu takip ettim:

.aspx

<asp:GridView ID="gvCases" DataKeyNames="UserId" runat="server" AutoGenerateColumns="False" 
    BorderWidth="0px" CssClass="gridList" GridLines="None"> 
    <AlternatingRowStyle BackColor="#F7F7F7" /> 
    <Columns> 

     <asp:BoundField DataField="id" HeaderText="Case Ref" /> 

     <asp:TemplateField HeaderText="Name"> 
      <ItemTemplate> 
       <asp:Label ID="clientName" runat="server" Text="Label"></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:BoundField DataField="company" HeaderText="Company" /> 

     <asp:TemplateField HeaderText="Order Date"> 
      <ItemTemplate> 
       <asp:Label ID="dateTime" runat="server" Text="Label"></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Case Owner"> 
      <ItemTemplate> 
       <asp:DropDownList ID="iconUsers" runat="server" OnSelectedIndexChanged="iconUsers_SelectedIndexChanged"> 
       </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField ShowHeader="False"> 
      <ItemTemplate> 
       <asp:Button ID="btnDetails" runat="server" CausesValidation="False" Text="Details" /> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField ShowHeader="False"> 
      <ItemTemplate> 
       <asp:Button ID="btnSchedule" runat="server" CausesValidation="False" Text="Schedule" /> 
      </ItemTemplate> 
     </asp:TemplateField> 



    </Columns> 
</asp:GridView> 

.Vb

: Burada Link to post

benim kodudur

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 


    If (Request.IsAuthenticated = False) Then 
     Response.Redirect("~/admin/default.aspx") 
    End If 


    Dim keypadSQL As SqlConnection = New SqlConnection() 
    keypadSQL.ConnectionString = ConfigurationManager.ConnectionStrings("connKeypad").ConnectionString() 


    Dim cmdActive As SqlCommand = New SqlCommand() 
    cmdActive.Connection = keypadSQL 
    cmdActive.CommandText = "spCasesActive" 
    cmdActive.CommandType = CommandType.StoredProcedure 


    Dim daCases As SqlDataAdapter = New SqlDataAdapter 
    daCases.SelectCommand = cmdActive 

    Dim dsCases As DataSet = New DataSet() 
    daCases.Fill(dsCases, "CaseList") 

    Dim CaseTotal As Integer 
    CaseTotal = dsCases.Tables(0).Rows.Count 

    If CaseTotal = 1 Then 
     iCaseTotal.InnerHtml = CaseTotal & " Case" 
    Else 
     iCaseTotal.InnerHtml = CaseTotal & " Cases" 
    End If 

    gvCases.DataSource = dsCases 
    gvCases.DataBind() 
    cmdActive.Dispose() 


    If Page.IsPostBack Then 

    End If 

End Sub 

Protected Sub gvCases_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvCases.RowDataBound 

    If e.Row.RowType = DataControlRowType.Header Then 

     gvCases.Columns(5).ItemStyle.Width() = "60" 
     gvCases.Columns(6).ItemStyle.Width() = "70" 

    End If 

    If e.Row.RowType = DataControlRowType.DataRow Then 

     Dim rowView As DataRowView = CType(e.Row.DataItem, DataRowView) 

     Dim strClientName As String 
     Dim clientName As Label 
     strClientName = rowView("firstname") & " " & rowView("lastname") 
     clientName = CType(e.Row.FindControl("clientName"), Label) 
     clientName.Text = strClientName 

     Dim strDateTime As String 
     Dim dateTime As Label 
     strDateTime = rowView("CaseSent") 
     dateTime = CType(e.Row.FindControl("dateTime"), Label) 
     dateTime.Text = FormatDateTime(strDateTime, DateFormat.ShortDate) & "<br />" & FormatDateTime(strDateTime, DateFormat.ShortTime) 

     gvCases.Columns(3).ItemStyle.Font.Size = 8 
     gvCases.Columns(5).ControlStyle.CssClass = "btnEdit" 
     gvCases.Columns(6).ControlStyle.CssClass = "btnSchedule" 

     Dim intUserId As String 
     intUserId = Convert.ToString(gvCases.DataKeys(e.Row.RowIndex).Value) 



     Dim cmd As New SqlCommand("SELECT id, Firstname, Lastname, Firstname + ' ' + Lastname As FullName FROM [users_icon] ORDER BY Firstname, Lastname", New SqlConnection(ConfigurationManager.ConnectionStrings("connKeypad").ConnectionString())) 
     cmd.Connection.Open() 

     Dim ddlValues As SqlDataReader 
     ddlValues = cmd.ExecuteReader() 

     Dim iconUsers As DropDownList 
     iconUsers = CType(e.Row.FindControl("iconUsers"), DropDownList) 
     iconUsers.Style.Add("font-size", "11px") 
     iconUsers.DataSource = ddlValues 
     iconUsers.DataValueField = "id" 
     iconUsers.DataTextField = "FullName" 
     iconUsers.DataBind() 

     Dim ListItem1 = New ListItem("Select Case Owner", "0") 
     iconUsers.Items.Insert("0", ListItem1) 
     iconUsers.AutoPostBack = True 
     If IsDBNull(rowView("CaseOwner")) Then 
      iconUsers.SelectedValue = 0 
     Else 
      iconUsers.SelectedValue = rowView("CaseOwner") 
     End If 

     AddHandler iconUsers.SelectedIndexChanged, AddressOf iconUsers_SelectedIndexChanged 

     cmd.Connection.Close() 
     cmd.Connection.Dispose() 


     Dim btnDetails As Button = CType(e.Row.FindControl("btnDetails"), Button) 
     btnDetails.PostBackUrl = "~/admin/detail.aspx?uid=" & intUserId 

     Dim LabelAddress As Button = CType(e.Row.FindControl("btnSchedule"), Button) 
     LabelAddress.PostBackUrl = "~/admin/schedule.aspx?uid=" & intUserId 

    End If 

End Sub 

Protected Sub iconUsers_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 

    Response.Write("Function Called") 

End Sub 

Yardımlarınız için teşekkür ederiz. J.

+0

Evet, gvCases_RowDataBound içinde - iconUsers.AutoPostBack = True – JBoom

+0

ViewState etkin mi yoksa devre dışı mı? – Jeff

+0

Izgara görünümünde ve açılır menüde Kaliteyi Ayarla seçeneği, sayfa için varsayılan olarak ayarlanmış olmalıdır, bu yüzden etkin olduğunu düşünüyorum !? – JBoom

cevap

6

(Event handler not firing using AddHandler ve Assign an event to a custom control inside a Repeater control bakınız) deneyin, ancak işleyicisi iki kez ekliyoruz gibi özel bir durum görünüyor; İşaretlemede bir kez ve bir kez veriboundunda.

RowDataBound olayından birini kaldırırdım (hiçbir şey yapmadığından, işleyici geri gönderildiğinde işleyici kaybolur ve olay gerçekleştikten sonra işleyici eklenir). Ayrıca, @Bala'dan bahsedildiği gibi AutoPostBack'den emin olun.

+1

Kodumu biraz değiştirdim, olay işleyicisini ve arka plandaki kodun otomatik olarak kaldırılmasını sağladım ve .ASPX - , ama hala ateş etmiyor :(, iyi ve gerçekten sıkışmış. – JBoom

+0

Yani sayfa geri gönderiliyor, hata ayıklıyorsunuz ve iconUsers_SelectedIndexChanged değerine ayarlamış olduğunuz kesme noktasını hiçbir zaman etkilemiyor? –

+0

Evet thats doğru ian, dropdown listelerinden birini değiştirdiğimde hiçbir zaman kesme noktasına gelmez – JBoom

4

AutoPostBack öğesi true olarak ayarlanmış demektir, ancak işaretlemede görmüyorum ve varsayılan olarak yanlış olarak ayarlanmış. Yani bazı benzer soru vardır

<asp:DropDownList ID="iconUsers" runat="server" OnSelectedIndexChanged="iconUsers_SelectedIndexChanged" AutoPostBack="true"> 
      </asp:DropDownList> 
+0

Merhaba Bala, bu satırda gvCases_RowDataBound kodunda: iconUsers.AutoPostBack = True. Açılan listeyi değiştirdiğimde sayfanın da geri gönderildiğini görebiliyorum, ancak etkinlik patlamıyor. – JBoom

İlgili konular