Вы также можете использовать метод compareTo()
для сравнения двух строк. Если результат compareTo равен 0, то две строки равны, в противном случае сравниваемые строки не равны.
==
сравнивает ссылки и не сравнивает фактические строки. Если вы создали каждую строку, используя new String(somestring).intern()
, вы можете использовать оператор ==
для сравнения двух строк, в противном случае могут использоваться только методы equals () или compareTo.
Если вы устанавливаете поле DataKey GridView так, чтобы оно содержало первичный ключ, есть эта статья CodeProject о том, как установить выбранный индекс gridview на основе значения ключа записи, с использованием метода расширения:
public static void SetRowValueValueByKey(this GridView GridView, string DataKeyValue)
{
int intSelectedIndex = 0;
int intPageIndex = 0;
int intGridViewPages = GridView.PageCount;
// Loop thru each page in the GridView
for (int intPage = 0; intPage < intGridViewPages; intPage++)
{
// Set the current GridView page
GridView.PageIndex = intPage;
// Bind the GridView to the current page
GridView.DataBind();
// Loop thru each DataKey in the GridView
for (int i = 0; i < GridView.DataKeys.Count; i++)
{
if (Convert.ToString(GridView.DataKeys[i].Value) == DataKeyValue)
{
// If it is a match set the variables and exit
intSelectedIndex = i;
intPageIndex = intPage;
break;
}
}
}
// Set the GridView to the values found
GridView.PageIndex = intPageIndex;
GridView.SelectedIndex = intSelectedIndex;
GridView.DataBind();
}
Учебники по доступу к данным в ASP.NET затрагивают аспекты вашего вопроса. Для меня это было давно, но я думаю, что последняя часть этого конкретного руководства, возможно, наиболее близка к тому, что вам нужно:
http://www.asp.net/learn/data-access/tutorial-10-vb .aspx
Просто включите разбиение на страницы для GridView, и все должно работать.
Правильное решение для этого будет немного отличаться в зависимости от того, как вы фактически извлекаете данные из базы данных. Но процесс почти такой же.
Теперь кикер здесь - шаги 1 и 2. Если вы выполняете пейджинг данных на уровне SQL, вам нужно будет получить другой вызов хранимой процедуры / базы данных для определения "идентификатора строки" выбранного элемента. В противном случае, если вы загружаете коллекцию объектов или набор данных, вы можете пройти через цикл и найти элемент. Сохранение счетчика строк, если действительно необходимо.
Не элегантно, но, честно говоря, нет «элегантного» способа сделать это.
Узнайте, какая строка находится вТеперь кикер здесь - шаги 1 и 2. Если вы выполняете пейджинг данных на уровне SQL, вам нужно будет получить другой вызов хранимой процедуры / базы данных для определения "идентификатора строки" выбранного элемента. В противном случае, если вы загружаете коллекцию объектов или набор данных, вы можете пройти через цикл и найти элемент. Сохранение счетчика строк, если действительно необходимо.
Не элегантно, но, честно говоря, нет «элегантного» способа сделать это.
Узнайте, какая строка находится вТеперь кикер здесь - шаги 1 и 2. если вы выполняете пейджинг данных на уровне SQL, вам нужно будет получить другой вызов хранимой процедуры / базы данных для определения «идентификатора строки» выбранного элемента. В противном случае, если вы загружаете коллекцию объектов или набор данных, вы можете пройти через цикл и найти элемент. Сохранение счетчика строк, если действительно необходимо.
Не элегантно, но, честно говоря, нет «элегантного» способа сделать это.
Кикер здесь - это шаги 1 и 2. Если вы выполняете страничную подкачку данных на уровне SQL, вам нужно будет получить другой вызов хранимой процедуры / базы данных для определения «идентификатора строки» выбранного элемента. В противном случае, если вы загружаете коллекцию объектов или набор данных, вы можете пройти через цикл и найти элемент. Сохранение счетчика строк, если действительно необходимо.Не элегантно, но, честно говоря, нет «элегантного» способа сделать это.
Кикер здесь - это шаги 1 и 2. Если вы выполняете страничную подкачку данных на уровне SQL, вам нужно будет получить другой вызов хранимой процедуры / базы данных для определения «идентификатора строки» выбранного элемента. В противном случае, если вы загружаете коллекцию объектов или набор данных, вы можете пройти через цикл и найти элемент. Сохранение счетчика строк, если действительно необходимо.Не элегантно, но, честно говоря, нет «элегантного» способа сделать это.
Помимо уже указанных ответов об использовании Vector, Vector также имеет несколько методов для перечисления и извлечения элементов, которые отличаются от интерфейса List, и разработчиков (особенно тех, кто изучил Java до 1.2) могут использовать их, если они есть в коде. Хотя перечисления работают быстрее, они не проверяют, была ли коллекция изменена во время итерации, что может вызвать проблемы, и, учитывая, что вектор может быть выбран для ее синхронизации - с сопутствующим доступом из нескольких потоков, это делает эту проблему особенно опасной. Использование этих методов также связывает большой объем кода с Vector, так что заменить его другой реализацией List будет непросто.
В Vector также есть множество методов для перечисления и извлечения элементов, которые отличаются от интерфейса List, и разработчики (особенно те, кто изучал Java до 1.2) могут использовать их, если они есть в коде. Хотя перечисления работают быстрее, они не проверяют, была ли коллекция изменена во время итерации, что может вызвать проблемы, и, учитывая, что вектор может быть выбран для ее синхронизации - с сопутствующим доступом из нескольких потоков, это делает эту проблему особенно опасной. Использование этих методов также связывает большой объем кода с Vector, так что будет нелегко заменить его другой реализацией List. В Vector также есть несколько методов для перечисления и извлечения элементов, которые отличаются от интерфейса List, и разработчики (особенно те, кто изучал Java до версии 1.2) могут использовать их, если они есть в коде. Хотя перечисления работают быстрее, они не проверяют, была ли коллекция изменена во время итерации, что может вызвать проблемы, и, учитывая, что вектор может быть выбран для ее синхронизации - с сопутствующим доступом из нескольких потоков, это делает эту проблему особенно опасной. Использование этих методов также связывает большой объем кода с Vector, так что будет нелегко заменить его другой реализацией List. t проверить, была ли коллекция изменена во время итерации, что может вызвать проблемы, и учитывая, что вектор может быть выбран для ее синхронизации - с сопутствующим доступом из нескольких потоков, это делает эту проблему особенно опасной. Использование этих методов также связывает большой объем кода с Vector, так что будет нелегко заменить его другой реализацией List. t проверить, была ли коллекция изменена во время итерации, что может вызвать проблемы, и учитывая, что вектор может быть выбран для ее синхронизации - с сопутствующим доступом из нескольких потоков, это делает эту проблему особенно опасной. Использование этих методов также связывает большой объем кода с Vector, так что будет нелегко заменить его другой реализацией List. Вы хотите, чтобы, если кто-то набирает URL страницы прямо в браузере и добавляет к нему ? Id = x , вы должны направить его на соответствующую страницу, выбрать соответствующую строку и заполнить FormView на основе выбранная запись.Что ж, если это так, я кое-что сделал, но позвольте мне заранее предупредить, что это не очень элегантно и сейчас 2:30 утра, поэтому, пожалуйста, не смейтесь.
Предположение: - В представленном решении поле DataKeyNames установлено как Первичный ключ исходной таблицы. Выбранные строки сортируются по этому ключу. Я использую SubSonic 3 для разговора с SQL Server 2005 Express DB (по совпадению, это мой первый проект SS3, очень занят в офисе, чтобы попробовать его).
Определение таблицы выглядит следующим образом:
Create Table StudentsTable
( EnrolmentNumber int not null identity primary key,
StudentName nvarchar(50) not null)
aspx:
<asp:GridView ID="gvStudents" runat="server" AllowPaging="True" PageSize="3"
OnSelectedIndexChanged="GridRowChanged" OnPageIndexChanging="GridPageChanging"
DataKeyNames="EnrolmentNumber">
<RowStyle BackColor="LightBlue" />
<AlternatingRowStyle BackColor="LightCoral" />
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server"
CommandName="Select" Text="Select"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<SelectedRowStyle BackColor="Red" BorderColor="Yellow" />
</asp:GridView>
<asp:FormView ID="fvSubjects" runat="server" AllowPaging="false"
Caption="Student" CaptionAlign="Left">
<ItemTemplate>
<table>
<tr>
<td>Enrolment Number</td>
<td><asp:Label ID="lblEN" runat="server"
Text=<%# Eval("EnrolmentNumber") %> /></td>
</tr>
<tr>
<td>Student Name</td>
<td><asp:Label ID="lblName" runat="server"
Text=<%# Eval("StudentName") %> /></td>
</tr>
</table>
</ItemTemplate>
</asp:FormView>
Код C # (сдержите смех):
private IList<StudentsTable> students;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadData();
CheckQueryString(students);
}
}
private void LoadData()
{
students = StudentsTable.All().ToList();
gvStudents.DataSource = students;
gvStudents.DataBind();
}
private void CheckQueryString(IList<StudentsTable> students)
{
if (!Request.QueryString.HasKeys() ||
string.IsNullOrEmpty(Request.QueryString["erno"]))
{
return;
}
var erno = Request.QueryString["erno"];
int key;
if (!int.TryParse(erno, out key))
return;
for (var i = 0; i < students.Count; i++)
{
if (students[i].EnrolmentNumber == key)
{
SetPageSize(students, i);
break;
}
}
}
private void SetPageSize(IList<StudentsTable> students, int i)
{
var ps = gvStudents.PageSize;
var cp = i / ps;
var ridx = i - ps - 1;
var pageEvent = new GridViewPageEventArgs(cp);
GridPageChanging(null, pageEvent);
gvStudents.SelectedIndex = ridx;
GridRowChanged(null, EventArgs.Empty);
}
protected void GridRowChanged(object sender, EventArgs e)
{
var rIdx = gvStudents.SelectedIndex;
if (rIdx < 0) return;
var key = gvStudents.DataKeys[rIdx];
var lst= StudentsTable.Find(x => x.EnrolmentNumber == (int)key.Value);
SetFormView(lst);
}
private void SetFormView(IList<StudentsTable> student)
{
fvSubjects.DataSource = student;
fvSubjects.DataBind();
}
protected void GridPageChanging(object sender, GridViewPageEventArgs e)
{
var p = e.NewPageIndex;
if (p > gvStudents.PageCount)
p = gvStudents.PageCount - 1;
gvStudents.PageIndex = p;
LoadData();
}
PS: - Ошибка, если вы поместите идентификатор последней записи.
РЕДАКТИРОВАТЬ: - Вот ссылка на Проект