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.
Paul L - Kendi sorununuzu çözdüyseniz en yararlı eylem bir cevap eklemek ve kabul etmektir. Bu, soruyu cevapsız sorular listesinden kaldırır. –
Ah, anlıyorum. Özür dilerim. Bunu şimdi yapacağım. –