2013-04-08 40 views
1

在我的程序(asp.net,C#)中我使用了gridview来显示数据。 它从下面的查询中获取数据。如何在Gridview中保存顺序

select * from Nametable where NameID in (4,3,1,22,15,8,9,5,7) 

但问题是GridView的是表示填充NameID的升序像(1,3,4,5,7,8,9,15,22)数据 。 我不希望数据进行排序,它应该显示 正是我在查询中提到的一样(4,3,1,22,15,8,9,5,7)

这里的方式是我的代码

private void loadGridView() 
{ 
    Query = "select * from Nametable where NameID in (4,3,1,22,15,8,9,5,7)" 

     DataSet ds = SqlHelper.ExecuteDataset(CommonSettings.Constring, CommandType.Text, Query); 
     GridView1.DataSource = ds; 
     GridView1.DataBind(); 
} 

回答

5

这将是非常困难的事与代码,你已经提供。它与你的GridView没有任何关系,它是从SQL返回数据的方式。 SQL根本不会以这种方式为您排序结果。你必须在ORDER BY像这样指定一个明确CASE

Query = "select * from Nametable where NameID in (4,3,1,22,15,8,9,5,7) " + 
     "order by case NameID when 4 then 0 " + 
          "when 3 then 1 " + 
          "when 1 then 2 " + 
          "when 22 then 3 " + 
          "when 15 then 4 " + 
          "when 8 then 5 " + 
          "when 9 then 6 " + 
          "when 5 then 7 " + 
          "when 7 then 8 end"; 

显然,这是非常繁琐。我强烈建议您尝试按列排序。

+0

你是对的。它不是Gridview的问题。它的SQL服务器对它进行排序。您的使用案例陈述的建议不会对我有用,因为订单是动态的。谢谢 – Henry 2013-04-17 21:19:00

0

Datagridview对其列具有排序属性。可能对ID列启用排序。检查datagridview的属性以禁用排序或以编程方式禁用它

+0

它的ASP.NET不Winforms。但是,GridView列上的'SortExpression'不会自动排序,而是当用户单击该列的标题时。 – 2013-04-08 21:27:30

0

您可以使用列(NameId,SortOrder)作为查询的一部分创建临时表,并加入它并按SortOrder排序结果集 - - 这会达到你想要做的 - 但它有点儿好笑。