我有一个GridView,其中一个列/字段有复选框;根据后面代码中的子查询检查或取消选中复选框,而容器GridView绑定到SqlDataSource。我想要做的是,一旦GridView被数据绑定,然后按复选框的状态进行排序:所有选中复选框的行都显示在网格顶部。这是我的GridView的一部分:
<ItemTemplate>
<asp:CheckBox ID="ProductSelector" runat="server" Checked='<%# ShowCheckMarks(DataBinder.Eval(Container.DataItem,"prodid").ToString()) %>' />
</ItemTemplate>
我在想我可以调用GridView的Ondatabound事件,有人让它从那里排序吗? 谢谢。
答案 0 :(得分:1)
如果这是您需要排序的唯一行,为什么不只是将sc查询添加到用于提取数据的sql查询?
答案 1 :(得分:1)
如果你
,你可以节省很多工作将复选框的状态存储在数据库中
。这样,您可以轻松地在模板字段上设置排序表达式。 修改
你可以通过jQuery tablesorter在客户端执行此操作,但它可能是一个 有点太多的工作Check this。 我再次认为你可以以某种方式操纵查询来实现这一点。
试试这个
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
这会选择表格中的所有列。可能会在以后带来严重的问题。只查询您想要的列
从YourTable a
中选择a.column1,a.column2
答案 2 :(得分:1)
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表中提取所有项目,同时仅从products_recommended表中提取匹配项目。它还会将recommendedid转换为BIT值,该值应与复选框
一起使用答案 3 :(得分:0)
就像这里建议的好帮手一样,我需要有主要的SQL查询来填充GridView来对记录进行排序,而不是在后面的代码中使用不同的查询。所以现在Declarative 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