public static void MoveUpOrDownSelectedItem(ListBox LisBox, bool MoveUp)
{
if (LisBox.SelectedIndex > 0 && MoveUp)
{
// add a duplicate item up in the listbox
LisBox.Items.Insert(LisBox.SelectedIndex - 1, LisBox.SelectedItem);
// make it the current item
LisBox.SelectedIndex = (LisBox.SelectedIndex - 2);
// delete the old occurrence of this item
LisBox.Items.RemoveAt(LisBox.SelectedIndex + 2);
}
if ((LisBox.SelectedIndex != -1) && (LisBox.SelectedIndex < LisBox.Items.Count- 1) && MoveUp == false)
{
// add a duplicate item down in the listbox
int IndexToRemove = LisBox.SelectedIndex;
LisBox.Items.Insert(LisBox.SelectedIndex + 2, LisBox.SelectedItem);
// make it the current item
LisBox.SelectedIndex = (LisBox.SelectedIndex + 2);
// delete the old occurrence of this item
LisBox.Items.RemoveAt(IndexToRemove);
}
}
Если вы хотите однозначно идентифицировать строку в таблице, а не свой набор результатов, вам нужно использовать что-то вроде столбца IDENTITY. См. «Свойство IDENTITY» в справке SQL Server. SQL Server не создает автоматически идентификатор для каждой строки в таблице, как это делает Oracle, поэтому вам придется создать собственный столбец идентификатора и явно получить его в своем запросе.
EDIT: для динамическую нумерацию строк набора результатов см. ниже, но это, вероятно, было бы эквивалентом ROWNUM Oracle, и я предполагаю, что из всех комментариев на странице вы хотите, чтобы материал был выше. Для SQL Server 2005 и более поздних версий вы можете использовать новую функцию Ranking Functions для достижения динамической нумерации строк.
Например, я делаю это по моему запросу:
select row_number() over (order by rn_execution_date asc) as 'Row Number', rn_execution_date as 'Execution Date', count(*) as 'Count'
from td.run
where rn_execution_date >= '2009-05-19'
group by rn_execution_date
order by rn_execution_date asc
Вы получите:
Row Number Execution Date Count
---------- ----------------- -----
1 2009-05-19 00:00:00.000 280
2 2009-05-20 00:00:00.000 269
3 2009-05-21 00:00:00.000 279
На support.microsoft.com есть также статья о динамической нумерации строк.
Ознакомьтесь с новой функцией ROW_NUMBER . Это работает так:
SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE
Из http://vyaskn.tripod.com/programming_faq.htm#q17 :
Oracle имеет rownum для доступа к строкам таблицы с использованием номера строки или идентификатор строки. Есть ли аналог этого в SQL Server? Или как сгенерировать вывод с номером строки в SQL Server?
В SQL нет прямого эквивалента rownum или идентификатора строки Oracle Сервер. Строго говоря, в реляционной базе данных строки внутри table не упорядочены, и идентификатор строки действительно не имеет смысла. Но если ты Если вам нужна эта функция, рассмотрите следующие три альтернативы:
Добавьте столбец
IDENTITY
в вашу таблицу.Используйте следующий запрос, чтобы сгенерировать номер строки для каждой строки. Следующий запрос генерирует номер строки для каждой строки авторов. таблица базы данных пабов. Чтобы этот запрос работал, таблица должна иметь уникальный ключ.
SELECT (SELECT COUNT (i.au_id) ИЗ пабов .. авторов i ГДЕ i.au_id> = o.au_id) КАК RowID, au_fname + '' + au_lname AS 'Имя автора' ИЗ пабов .. авторов о ЗАКАЗАТЬ ПО RowID
Используйте метод временной таблицы, чтобы сохранить весь набор результатов во временной таблице вместе с идентификатором строки, сгенерированным функцией
IDENTITY ()
функция. Создание временной таблицы будет дорогостоящим, особенно если вы работаете с большими таблицами. Используйте этот подход, если вы этого не сделаете иметь уникальный ключ в вашей таблице.
Если вы просто хотите базовую строку нумерации для небольшого набора данных, как насчет этого?
SELECT row_number() OVER (order by getdate()) as ROWID, * FROM Employees