ASP.NET GridView OnDataBound сортировать в коде позади - PullRequest
0 голосов
/ 06 марта 2012

У меня есть GridView, где один из столбцов / полей имеет флажки; флажки отмечены или не отмечены на основе подзапроса из кода, в то время как контейнер GridView привязан к SqlDataSource. То, что я хочу сделать, это то, что как только GridView привязан к данным, сделайте его сортировку по состоянию флажков: все строки с отмеченными флажками появятся в верхней части сетки. Вот часть моего GridView:

  <ItemTemplate>
     <asp:CheckBox ID="ProductSelector" runat="server" Checked='<%# ShowCheckMarks(DataBinder.Eval(Container.DataItem,"prodid").ToString()) %>' />
    </ItemTemplate>

Я думаю, что я могу вызвать событие Ondatabound GridView, и кто-то может сделать это оттуда? Благодарю.

Ответы [ 4 ]

1 голос
/ 06 марта 2012

Вы можете сэкономить много работы, если

сохраните состояние флажка в базе данных

.Таким образом, вы можете легко установить выражение сортировки в поле шаблона. Редактировать

Вы можете сделать это на стороне клиента с помощью jQuery tableorter, но это может быть слишком много работы Проверьте это .Опять же, я думаю, что вы можете каким-то образом манипулировать запросом для достижения этой цели.

Попробуйте это

SELECT dbo.Products.*, dbo.products_recommended.* FROM dbo.Products INNER JOIN dbo.products_recommended ON (dbo.Products.prodid = dbo.products_recommended.prodid) WHERE dbo.Products.prodid IN (dbo.products_recommended.prodid) AND (dbo.Products.prodid = " + itemid + " order by dbo.Products.prodid desc )"

Обратите внимание: никогда не используйте

select a.* from YourTable a

Это будетвыберите все столбцы в вашей таблице и может привести к серьезным проблемам позже.Запросите только те столбцы, которые вам нужны, например:

выберите a.column1, a.column2 из YourTable a

1 голос
/ 07 марта 2012
SELECT dbo.Products.prodid,
dbo.Products.itemtitle,
dbo.Products.itemnumber,
dbo.Products.image_1, 
CAST(ISNULL(dbo.products_recommended.recommendedid, 0) as BIT) as recommendedid
FROM dbo.Products LEFT OUTER JOIN dbo.products_recommended 
ON (dbo.Products.prodid = dbo.products_recommended.prodid) 
WHERE dbo.Products.prodid IN (dbo.products_recommended.prodid) 
AND (dbo.Products.prodid = @itemid)

Левое внешнее соединение гарантирует, что оно извлекает все элементы из таблицы «Продукты», а извлекает только соответствующие элементы из таблицы products_recommended.Он также преобразует рекомендованное значение в значение BIT, которое должно работать с флажками

1 голос
/ 06 марта 2012

Если это единственная строка, которую нужно отсортировать, почему бы просто не добавить порядок по запросу SQL, который вы используете для извлечения данных?

0 голосов
/ 08 марта 2012

Как и предлагали хорошие помощники, мне нужно было выполнить основной SQL-запрос для заполнения GridView для сортировки записей, а не другого запроса в коде. Итак, теперь декларативный синтаксис SqlDataSource выглядит следующим образом. Это решает проблему. Я узнал несколько вещей из отзывов здесь. Спасибо всем!

SELECT DISTINCT Products.prodid,
Products.itemtitle,
Products.itemnumber,
Products.image_1, 
 CASE WHEN YESNO IS NULL THEN CAST(0 AS BIT) ELSE CAST(1 AS BIT) END AS CheckUncheck
FROM Products
LEFT OUTER JOIN (SELECT prodid_recommended as YESNO FROM products_recommended 
WHERE @itemid IN (prodid)  ) A 
 ON Products.prodid = A.YESNO
  ORDER BY CheckUncheck DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...