Отображение клиентов из базы данных SQL Server с использованием элемента управления списком данных в asp.net

У меня есть список из 1000 клиентов, которые я показываю через элемент управления списком данных в asp.net. Список показывает одного клиента на странице.

Запрос, который я использую для привязки списка данных:

static public DataTable GetAllCustomers()
{
    string sql = "Select * from [Customers]";
    SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString);
    DataTable dt = new DataTable();
    da.Fill(dt);
    return dt;
}

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

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


person Mr A    schedule 15.02.2012    source источник
comment
Вы обновляете данные о клиентах? Несколько человек смотрят на клиентов одновременно? При обновлении вы можете добавить последнее обновленное поле в запрос и упорядочить его - все, что не изменилось, появится первым   -  person kaj    schedule 15.02.2012
comment
на пользователя? или одинаково для всех пользователей?   -  person Aristos    schedule 15.02.2012
comment
@KAJ Да, несколько пользователей вошли в систему одновременно, примерно 5. Также доступна дополнительная опция обновления.   -  person Mr A    schedule 15.02.2012
comment
Он должен быть одинаковым для всех пользователей.   -  person Mr A    schedule 15.02.2012
comment
Если просто просмотра клиента достаточно, чтобы заставить его быть перемещенным в конец списка, вы можете захотеть обработать событие ItemCreated DataList и идентифицировать текущий элемент и выполнить обновление базы данных - идея аналогична последнему обновлению выше, но лучше названа последний просмотренный   -  person kaj    schedule 15.02.2012


Ответы (3)


Когда клиент просматривается, фиксируйте текущую дату и время и используйте сортировку, порядок по дате и времени в порядке возрастания

person Prabhavith    schedule 15.02.2012
comment
Как я узнаю, что клиент был просмотрен? - person Mr A; 15.02.2012
comment
они могут выбрать эту строку оттуда, которую мы можем захватить, или вы можете использовать событие onmouseover - person Prabhavith; 15.02.2012

Создайте новый столбец в той же таблице. Всякий раз, когда вы просматриваете клиента, обновляйте клиента с текущей датой и временем для .this вновь созданного столбца.

ALTER TABLE YourTableName 
ADD NewColumnName DATETIME DEFAULT getdate()

Вновь созданный столбец должен иметь все значения, изначально обновленные по текущей дате и времени. Это означает, что значение по умолчанию для этого столбца будет GetDate().

Когда вы приносите все записи из базы данных, отсортируйте их по столбцу. Таким образом, у вас всегда будут непросмотренные клиенты в топе каждый раз...

static public DataTable GetAllCustomers()
{
    string sql = "Select * from [Customers]";
    using (SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString))
    {
        using (DataTable dt = new DataTable())
        {
            da.Fill(dt);
            return dt;
        }
    }
}

Надеюсь, что это поможет вам...

person Pankaj    schedule 15.02.2012

Во-первых, вам нужно где-то запомнить, что такое последний CustomterID, который вы показываете, и строки Max ваших клиентов.

Допустим, что строки LastCustomerID -> CuLast и Max -> CuMax, тогда SQL может быть таким.

WITH CustomersNewOrder as (
 select *, CustomerID-CuLast as OrderMe from Customers where CustomerID > CuLast
union
 select *, CustomerID+CuMax as OrderMe from Customers where CustomerID <= CuLast 
) select * from CustomersNewOrder order by OrderMe

также When the CuLast > CuMax then make the CuLast = 0

Что я делаю здесь, так это то, что номер последний начинается с 0, а тот, который у вас есть, все готово, показывает, начиная с максимума в списке.

Таким образом, вам не нужно обновлять базу данных, и нужно запомнить только один номер, который вы показываете последним.

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

person Aristos    schedule 15.02.2012