ASP.NET GridView OnDataBound在Code Behind中排序

时间:2012-03-06 18:01:59

标签: asp.net gridview

我有一个GridView,其中一个列/字段有复选框;根据后面代码中的子查询检查或取消选中复选框,而容器GridView绑定到SqlDataSource。我想要做的是,一旦GridView被数据绑定,然后按复选框的状态进行排序:所有选中复选框的行都显示在网格顶部。这是我的GridView的一部分:

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

我在想我可以调用GridView的Ondatabound事件,有人让它从那里排序吗? 谢谢。

4 个答案:

答案 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