У меня есть GridView, содержащийся в прокручиваемом div. У меня также есть кнопка, которая выбирает строку в этом GirdView на основе текста TextBox на странице. Строка выбрана просто отлично, но я не могу заставить div прокручивать выбранную строку программно. Я попытался использовать несколько методов с использованием метода «scrollTop» JavaScript, но по какой-то причине я не могу заставить их работать правильно. Вот мой код до сих пор (некоторые из кода для метода «btnGo_OnClick» взяты из ответа на аналогичный вопрос на форумах asp.net, но он, похоже, не работает для меня):ASP.NET GridView в прокручиваемом Div: Прокрутите до SelectedIndex
.aspx файл:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true"
CodeBehind="StudentList.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<br />
<div style="overflow: scroll; height: 400px;">
<asp:GridView ID="StudentList" runat="server" AutoGenerateColumns="False" DataSourceID="DataSource1"
AllowSorting="true" CellPadding="4" DataKeyNames="Email">
<Columns>
<asp:BoundField DataField="LastName" HeaderText="Last" ReadOnly="True" SortExpression="LastName" />
<asp:BoundField DataField="FirstName" HeaderText="First" ReadOnly="True" SortExpression="FirstName" />
<asp:BoundField DataField="MiddleInitial" HeaderText="Middle" ReadOnly="True" SortExpression="MiddleInitial" />
<asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True" SortExpression="Phone" />
<asp:BoundField DataField="Email" HeaderText="Email" ReadOnly="True" SortExpression="Email" />
<asp:BoundField DataField="GPA" HeaderText="GPA" ReadOnly="True" SortExpression="GPA" />
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:Button ID="btnEdit1" Text="Edit" AutoPostBack="True" runat="server" OnClick="btnEdit1_OnClick" />
 
<asp:Button ID="btnDelete" Text="Delete" AutoPostBack="True" runat="server" OnClick="btnDelete_OnClick" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<SelectedRowStyle BackColor="Black" ForeColor="White" />
</asp:GridView>
</div>
<br />
<br />
Search by Last Name:
<asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>
 
<asp:Button ID="btnGo" Text="Go" AutoPostBack="True" runat="server" OnClick="btnGo_OnClick" />
<br />
<br />
<asp:Label ID="lbl1" runat="server" Text=""></asp:Label>
<asp:AccessDataSource ID="DataSource1" runat="server" DataFile="~/App_Data/University(2).accdb"
SelectCommand="SELECT [LastName], [FirstName], [MiddleInitial], [Phone], [Email], [GPA]
FROM [Students] ORDER BY [LastName]" DeleteCommand=""></asp:AccessDataSource>
</asp:Content>
И файл .aspx.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnDelete_OnClick(object sender, EventArgs e)
{
Button b = (Button)sender;
GridViewRow containingRow = (GridViewRow)b.NamingContainer;
String strEmail = containingRow.Cells[4].Text;
DataSource1.DeleteCommand = "DELETE FROM [CoursesTaken] WHERE [StudentID] = '" + strEmail + "'";
DataSource1.Delete();
DataSource1.DeleteCommand = "DELETE FROM [Students] WHERE [Email] = '" + strEmail + "'";
DataSource1.Delete();
StudentList.DataBind();
}
protected void btnEdit1_OnClick(object sender, EventArgs e)
{
Button b = (Button)sender;
GridViewRow containingRow = (GridViewRow)b.NamingContainer;
Session["Email"] = containingRow.Cells[4].Text;
Response.Redirect("~/StudentEdit.aspx");
}
protected void btnGo_OnClick(object sender, EventArgs e)
{
int i = 0;
foreach (GridViewRow rowItem in StudentList.Rows)
{
if (rowItem.Cells[0].Text.StartsWith(txtSearch.Text))
{
StudentList.SelectedIndex = i;
int intScrollTo = this.StudentList.SelectedIndex * (int)this.StudentList.RowStyle.Height.Value;
string strScript = "";
strScript += "var gridView = document.getElementById('" + this.StudentList.ClientID + "');\n";
strScript += "if (gridView != null && gridView.parentElement != null && gridView.parentElement.parentElement != null)\n";
strScript += " gridView.parentElement.parentElement.scrollTop = " + intScrollTo + ";\n";
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "btnGo_OnClick", strScript, true);
break;
}
i++;
}
}
}
}
Может кто-нибудь объяснить, почему это не работает, как ожидалось?
Я буду адаптировать вашу идею для своего кода и сообщить, успешна ли она. – ScottRobertLane
Отладка этого примера дает следующую ошибку: «Ошибка выполнения Microsoft JScript: невозможно получить значение свойства« childNodes »: объект имеет значение null или undefined» для следующей строки в скрипте на странице разметки: «rows [rowIndex]. ChildNodes [0] .focus();». Почему это? – ScottRobertLane
Возможно, вы получаете неправильную ссылку. Однако я должен был бы убедиться, что ваш адаптированный код был уверен. Поместите в какой-то сайт, как пастебин. Какой браузер вы используете? В своем отладчике попробуйте сообщить, какие следующие выходы: 'rows [rowIndex].tagName' – deostroll