2016-04-08 22 views
1

UPDATE: Sorunu çözdüm. PopulateDG numaralı çağrı, DropDown'ın PreRender olay işleyicisine gelmelidir. Benim sorunum çok erken (yani, öğeleri DropDown kontrolüne yüklenmeden önce) veya çok geç (ASP'nin DataGrid'in nasıl görüneceğini belirledikten sonra) kullanmayı denediğim gibi, DataBind'i bu noktada çağırmanın hiçbir etkisi olmadı). Açıkçası, sayfaların ve kontrollerin çeşitli uygulama aşamalarında daha fazla okumaya ihtiyacım var. Bununla birlikte, bunu gelecekteki Google kullanıcılarının yararına bırakmak.SOLVED: ASP.NET Yükleme ve Gösterme DataGrid, bir başka denetim dayalı, sayfa yüklendiğinde


ASP.NET içerik sayfamda bir DropDownList ve DataGrid'im var. DropDownList, sayfa yüklendiğinde bir SQL sorgusunun sonuçlarından doldurulur. DataGrid'in bir SQL sorgusunun sonuçlarından doldurulmasını istiyorum, ancak bu sorgu, DropDownList öğesinin seçili öğesine bağlı. PopulateDG işlevini çağıran DropDownList1.SelectedIndexChanged için bir olay işleyicim var. Bu işlev, seçili öğeyi DropDown'dan alır (SelectedItem bir şey değilse ilk öğeye varsayılan), bir SQLDataAdapter oluşturur, veritabanını sorgular, DataSet'i doldurur ve son olarak DataGrid'in DataBind()'u çağırır. Bu işlev, işlev DropDown olay işleyicisinden çağrıldığında mükemmel çalışır.

Artık DataGrid'in, sayfa ilk kez yüklendiğinde, DropDown öğesinin ilk öğesinden gelen bilgileri kullanarak (kullanıcının herhangi bir şey seçmesinden önce olacağı için) olmasını isterim. PopulateDG'u, Sayfa ve her iki denetim için Init, PreInit, PreRender, Load ve Unload işleyicilerinde boş yere kullanmamaya çalıştım. Hata ayıklayıcısını kullandığımda, ItemsGrid.DataSource'ın gerçekten istediğim bilgilere sahip olduğunu görebiliyorum, ancak ItemsGrid.DataBind, DataGrid'in SelectedIndexChanged işleyicisinden çağrıldığında olduğu gibi sayfada görünmesine neden gibi görünmüyor. Kontrol sadece sayfaya işlenmiyor.

PopulateDG: benim aspx sayfasının

Protected Sub PopulateDG() 
    Dim WeekId As Integer 
    Dim DDIdx As Integer 
    If DropDownList1.SelectedItem Is Nothing Then 
     DDIdx = 0 
    Else 
     DDIdx = DropDownList1.SelectedIndex 
    End If 
    WeekId = DropDownList1.Items.Item(DDIdx).Value 

    Dim myConnection As SqlConnection 
    Dim SQLCommand As SqlDataAdapter 

    Dim rootWebConfig As System.Configuration.Configuration 
    rootWebConfig = Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/Web.config") 
    Dim connString As System.Configuration.ConnectionStringSettings 
    connString = rootWebConfig.ConnectionStrings.ConnectionStrings("ConnectionString") 
     If Not (connString.ConnectionString = Nothing) Then 
      Console.WriteLine("Northwind connection string = " & connString.ConnectionString) 
     Else 
      Console.WriteLine("No Northwind connection string") 
     End If 

    myConnection = New SqlConnection(connString.ConnectionString) 
    SQLCommand = New SqlDataAdapter("SELECT CONVERT(VARCHAR(10), WorkDate, 101) AS WorkDate, CONVERT(VARCHAR(10), WorkStartTime, 8) AS StartTime, CONVERT(VARCHAR(10), WorkEndTime, 8) AS EndTime, BreakMinutes FROM Days WHERE WeekId = " & WeekId & " ORDER BY WorkDate", myConnection) 

    Dim ds As DataSet = New DataSet() 
    SQLCommand.Fill(ds) 
    ItemsGrid.DataSource = ds 
    ItemsGrid.DataBind() 'DEBUGGER BREAK POINT HERE 

End Sub 

İçerik işaretleme: alt son satırına ikinci At

<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server"> 

     <asp:DropDownList ID="DropDownList1" 
      runat="server" 
      DataSourceID="TimeSheetDB" 
      DataTextField="WeekEndLabel" 
      DataValueField="WeekId" 
      OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" 
      AutoPostBack="True"> 
     </asp:DropDownList> 
     <asp:SqlDataSource ID="TimeSheetDB" 
      runat="server" 
      ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
      SelectCommand="SELECT [WeekId], 'Week Ending ' + CONVERT(varchar(10), EndDate, 101) AS WeekEndLabel FROM [Weeks] ORDER BY [EndDate]"> 
     </asp:SqlDataSource> 

     <asp:DataGrid id="ItemsGrid" 
      BorderColor="black" 
      BorderWidth="1" 
      CellPadding="3" 
      AutoGenerateColumns="true" 
      runat="server" 
      > 
     </asp:DataGrid> 

</asp:Content> 

, bir kırılma noktası var ve debugger kullanarak görebildiğim ItemsGrid.DataSource.Tables.List (0) tam olarak istediğim gibi doldurulur, ancak DataBind işlevi SelectedItemChanged olay işleyicisi dışında herhangi bir yerden çağrıldığında hiçbir şey yapmıyor gibi görünüyor. Sayfa ilk yüklendiğinde nasıl düzgün çalışabilirim? Problemi çözdüm.

+0

Paul L - Kendi sorununuzu çözdüyseniz en yararlı eylem bir cevap eklemek ve kabul etmektir. Bu, soruyu cevapsız sorular listesinden kaldırır. –

+0

Ah, anlıyorum. Özür dilerim. Bunu şimdi yapacağım. –

cevap

1

Problemi çözdüm. PopulateDG çağrısı, DropDown'ın PreRender olay işleyicisine gelmelidir. Benim sorunum çok erken (yani, öğeleri DropDown kontrolüne yüklenmeden önce) veya çok geç (ASP'nin DataGrid'in nasıl görüneceğini belirledikten sonra) kullanmayı denediğim gibi, DataBind'i bu noktada çağırmanın hiçbir etkisi olmadı). Açıkçası, sayfaların ve kontrollerin çeşitli uygulama aşamalarında daha fazla okumaya ihtiyacım var.

İlgili konular