2014-02-12 6 views
0

У меня возникли проблемы с методом databind элемента управления gridview. Я мог бы использовать некоторую помощь. Некоторые предпосылки ... У меня есть интерфейс поиска с различными текстовыми полями (имя, фамилия, год, пол и т. Д.). Пользователь вводит некоторые данные и нажимает кнопку поиска. В это время я динамически генерирую SQL для источника данных и привязывая его к элементу управления gridview.ASP.NET Gridview Paging Issue

Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click 
    ' Check Program Year 
    If ddYear.SelectedValue = 0 Then 
     lblStatus.Text = "Please select a program year!" 
     Exit Sub 
    Else 
     lblStatus.Text = "" 
    End If 

    ds1.SelectCommand = "SELECT [StudentId], [ProgramYear], [LastName], [Middle], [FirstName], [HighSchoolCode], [Sex], [DateOfBirth] FROM [Student] WHERE [ProgramYear] = " & ddYear.SelectedValue & "" 

    Dim useCase As Integer = 0 

    If tbFname.Text <> "" Then useCase = 1 
    If tbLname.Text <> "" Then useCase = 2 
    If tbFname.Text <> "" And tbLname.Text <> "" Then useCase = 3 
    If tbFname.Text <> "" And tbM.Text <> "" Then useCase = 4 
    If tbID.Text <> "" Then useCase = 5 
    If tbHSCode.Text <> "" Then useCase = 6 
    If tbLname.Text <> "" And ddGender.SelectedValue <> "0" Then useCase = 7 
    If tbHSCode.Text <> "" And ddGender.SelectedValue <> "0" Then useCase = 8 


    Select Case useCase 

     Case 1 'First Name 
      ds1.SelectCommand += " and ([FirstName] LIKE '%' + '" & tbFname.Text & "' + '%')" 
     Case 2 'Last Name 
      ds1.SelectCommand += " and ([LastName] LIKE '%' + '" & tbLname.Text & "' + '%')" 
     Case 3 'First and Last Name 
      ds1.SelectCommand += " and ([FirstName] LIKE '%' + '" & tbFname.Text & "' + '%') and ([LastName] LIKE '%' + '" & tbLname.Text & "' + '%')" 
     Case 4 'First and Middle 
      ds1.SelectCommand += " and ([FirstName] LIKE '%' + '" & tbFname.Text & "' + '%') and ([Middle] = '" & tbM.Text & "')" 
     Case 5 'Student ID 
      ds1.SelectCommand += " and ([StudentId] = '" & tbID.Text & "')" 
     Case 6 'HS Code 
      ds1.SelectCommand += " and ([HighSchoolCode] = '" & tbHSCode.Text & "')" 
     Case 7 'Last Name and Sex 
      ds1.SelectCommand += " and ([Sex] = '" & ddGender.SelectedValue & "' and ([LastName] LIKE '%' + '" & tbLname.Text & "' + '%'))" 
     Case 8 'HS Code and Sex 
      ds1.SelectCommand += " and ([HighSchoolCode] = '" & tbHSCode.Text & "' and [Sex] = '" & ddGender.SelectedValue & "')" 


     Case Else 
      ds1.SelectCommand += " order by [LastName] desc" 
    End Select 


    ds1.DataBind() 
    GridView1.DataBind() 


End Sub 

Это хорошо работает, однако, когда я включаю подкачки и применить метод OnPageIndexChanging как ниже я запускаю в беду.

Protected Sub gridview1_PageIndexChanging(sender As Object, e As GridViewPageEventArgs) 

    gridview1.PageIndex = e.NewPageIndex 
    GridView1.DataSource = ds1 
    gridview1.databind() 

End Sub 

Что происходит, что я нажимаю на пейджинговой колонтитуле GridView для изменения страниц и GridView не применяется новое связывание, пока я снова не нажать кнопку отправки. Я не уверен, почему это происходит, и любой совет приветствуется.

Gridview:

<asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False" DataKeyNames="StudentId" DataSourceID="ds1" AllowPaging="True" PageSize="15"> 
    <AlternatingRowStyle BackColor="White" /> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <%# Container.DataItemIndex + 1 %>. 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Student Id" InsertVisible="False" SortExpression="StudentId"> 
      <ItemTemplate> 
       <a href="searchDetail.aspx?StudentID=<%# eval("StudentId") %>" > 
       <asp:Label ID="xyz" runat="server" Text='<%# Bind("StudentId") %>' /></a> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" /> 
     <asp:BoundField DataField="Middle" HeaderText="Middle" SortExpression="Middle" /> 
     <asp:BoundField DataField="LastName" HeaderText="Last Name" SortExpression="LastName" /> 
     <asp:BoundField DataField="Sex" HeaderText="Sex" SortExpression="Sex" /> 
     <asp:BoundField DataField="HighSchoolCode" HeaderText="HS Code" SortExpression="HighSchoolCode" /> 
     <asp:BoundField DataField="ProgramYear" HeaderText="Program Year" SortExpression="ProgramYear" /> 
    </Columns> 
    <EditRowStyle BackColor="#2461BF" /> 
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#EFF3FB" /> 
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
    <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
    <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
    <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
    <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
</asp:GridView> 

DS1

<asp:SqlDataSource ID="ds1" runat="server" ConnectionString="<%$ ConnectionStrings:NMERITEXString %>"></asp:SqlDataSource> 

ответ

0

Что вам нужно сделать в gridview1_PageIndexChanging устанавливает gridview1.PageIndex и сделать то же самое, что и в btnSubmit_Click.

Чтобы избежать повторения кода, переместите содержимое btnSubmit_Click на отдельный субсчет, давайте назовем это LoadGrid

Private Sub LoadGrid() 
    ' Check Program Year 
    If ddYear.SelectedValue = 0 Then 
     lblStatus.Text = "Please select a program year!" 
     Exit Sub 
    Else 
     lblStatus.Text = "" 
    End If 

    ds1.SelectCommand = "SELECT [StudentId], [ProgramYear], [LastName], [Middle], [FirstName], [HighSchoolCode], [Sex], [DateOfBirth] FROM [Student] WHERE [ProgramYear] = " & ddYear.SelectedValue & "" 

    Dim useCase As Integer = 0 

    If tbFname.Text <> "" Then useCase = 1 
    If tbLname.Text <> "" Then useCase = 2 
    If tbFname.Text <> "" And tbLname.Text <> "" Then useCase = 3 
    If tbFname.Text <> "" And tbM.Text <> "" Then useCase = 4 
    If tbID.Text <> "" Then useCase = 5 
    If tbHSCode.Text <> "" Then useCase = 6 
    If tbLname.Text <> "" And ddGender.SelectedValue <> "0" Then useCase = 7 
    If tbHSCode.Text <> "" And ddGender.SelectedValue <> "0" Then useCase = 8 


    Select Case useCase 

     Case 1 'First Name 
      ds1.SelectCommand += " and ([FirstName] LIKE '%' + '" & tbFname.Text & "' + '%')" 
     Case 2 'Last Name 
      ds1.SelectCommand += " and ([LastName] LIKE '%' + '" & tbLname.Text & "' + '%')" 
     Case 3 'First and Last Name 
      ds1.SelectCommand += " and ([FirstName] LIKE '%' + '" & tbFname.Text & "' + '%') and ([LastName] LIKE '%' + '" & tbLname.Text & "' + '%')" 
     Case 4 'First and Middle 
      ds1.SelectCommand += " and ([FirstName] LIKE '%' + '" & tbFname.Text & "' + '%') and ([Middle] = '" & tbM.Text & "')" 
     Case 5 'Student ID 
      ds1.SelectCommand += " and ([StudentId] = '" & tbID.Text & "')" 
     Case 6 'HS Code 
      ds1.SelectCommand += " and ([HighSchoolCode] = '" & tbHSCode.Text & "')" 
     Case 7 'Last Name and Sex 
      ds1.SelectCommand += " and ([Sex] = '" & ddGender.SelectedValue & "' and ([LastName] LIKE '%' + '" & tbLname.Text & "' + '%'))" 
     Case 8 'HS Code and Sex 
      ds1.SelectCommand += " and ([HighSchoolCode] = '" & tbHSCode.Text & "' and [Sex] = '" & ddGender.SelectedValue & "')" 


     Case Else 
      ds1.SelectCommand += " order by [LastName] desc" 
    End Select 


    ds1.DataBind() 

    GridView1.DataSource = ds1; 
    GridView1.DataBind() 


End Sub 

затем вызвать LoadGrid() внутри btnSubmit_Click

Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click 
    'set to first page 
    gridview1.PageIndex = 0 

    LoadGrid() 
End Sub 

, а также называют LoadGrid() в gridview1_PageIndexChanging. Не забудьте добавить Handles gridview1.PageIndexChanging

Protected Sub gridview1_PageIndexChanging(sender As Object, e As GridViewPageEventArgs) Handles gridview1.PageIndexChanging 

    gridview1.PageIndex = e.NewPageIndex 
    LoadGrid() 

End Sub 
+0

Спасибо, я попытался добавить это, но у меня все еще такая же проблема ... – user2055729

+0

См. Мой отредактированный ответ, я надеюсь, что это сработает. – ekad

+0

Я попробовал отредактированный ответ, но сетка не восстанавливается, пока я не нажму кнопку отправки. Спасибо за улучшения, однако. – user2055729

0

Ok У меня он работает сейчас ...

мне пришлось добавить loadgrid() к югу до загрузки страницы следующим образом. Спасибо за твою помощь!

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

    If Page.IsPostBack Then 
     LoadGrid() 
    End If 

End Sub