ASP.NET Load&页面加载时,基于另一个控件显示DataGrid

时间:2016-04-08 18:10:15

标签: asp.net vb.net visual-studio datagrid event-handling

在我的ASP.NET内容页面上,我有一个DropDownList和一个DataGrid。当页面加载时,DropDownList将填充SQL查询的结果。我希望从SQL查询的结果中填充DataGrid,但该查询取决于DropDownList的选定项。我有DropDownList1.SelectedIndexChanged的事件处理程序,它调用函数PopulateDG。此函数从DropDown获取所选项(如果SelectedItem为Nothing,则默认为第一个元素),创建SQLDataAdapter,查询数据库,填充DataSet,最后调用DataGrid的DataBind()。当从DropDown的事件处理程序调用函数时,这一切都很有效。

我现在想要在首次加载页面时显示DataGrid,使用DropDown的第一个元素中的信息(因为它在用户选择任何内容之前)。我已经尝试将PopulateDG放在Page和两个控件的Init,PreInit,PreRender,Load和Unload处理程序中,但无济于事。当我使用调试器时,我可以看到ItemsGrid.DataSource确实具有我想要的信息,但ItemsGrid.DataBind似乎不会导致数据网格出现在页面上,就像从SelectedIndexChanged处理程序调用时一样。该控件根本无法呈现到页面上。

PopulateDG:

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

我的aspx页面的内容标记:

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

在sub的倒数第二行,我有一个断点,并且使用调试器,我可以看到ItemsGrid.DataSource.Tables.List(0)的填充方式与我一样,但是从SelectedItemChanged事件处理程序以外的任何地方调用时,DataBind函数似乎什么都不做。如何在首次加载页面时使其正常工作?

0 个答案:

没有答案
相关问题