查询出来的数据怎样进行二次查询

fjh525 2009-03-10 04:25:25
在查询一个表后,把查询出来的DataTable绑定到GridView里,如何在GridView里面再次根据条件查询,最好不是去查询数据库,以前听人说可以用ViewState,但我不会!很少用到ViewState

另:我在用ViewState的时候,用dt.Select查询出来的是一个DataRow数组,能把这个数组弄成DataTable类型吗?还有,在DataRow里面查询出来的值 ,好像没有那个自动序列的ID!

谁会这方面的东西麻烦回答写详细点,或直接发段代码看看!谢谢各位大大了!
...全文
149 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
金大哈 2009-03-10
  • 打赏
  • 举报
回复
简单查询可以如下:效率高的


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/* QQ312430633 创建日期:2008-06-25 */
--修改了ORDER BY 需要 percent 与 ORDERBY 失效的BUG--
---注意'roder by'用一个空格间隔

Create PROCEDURE [dbo].[les_AllowPaging]
@pageindex int, ----*****页码
@PageSize int, ----*****每页显示条数
@tsql varchar(4000)----*****SQL语句
as

Declare @SqlSelect varchar(4000)
Declare @orderby varchar(4000)
Declare @AllowPagingSql varchar(4000)

---判断是否排序
if CHARINDEX('order by',@tsql) <> 0
begin
set @SqlSelect=replace(substring (@tsql,1, CHARINDEX('order by',@tsql)-1),'$','''')
set @orderby=replace(substring (@tsql, CHARINDEX('order by',@tsql),len(@tsql) ),'$','''')
set @AllowPagingSql=
'select * from (SELECT ROW_NUMBER() OVER('+@orderby+') AS AllowPagingId,* FROM ('+
@SqlSelect
+') as table1) as table2 where AllowPagingId between '
+convert(varchar(10),((@pageindex-1) * @PageSize+1))+' and '
+convert(varchar(10), @pageindex * @PageSize)
exec (@AllowPagingSql)
end
else
begin
set @SqlSelect=replace(@tsql,'$','''')
set @orderby=''
set @AllowPagingSql=
'select * from (SELECT *,ROW_NUMBER() OVER(ORDER BY orderbyID DESC) AS AllowPagingId FROM ( select *, 1 as orderbyID from ( '
+@SqlSelect
+' ) as tbs1 ) as Tabl1 ) as table2 where AllowPagingId between '
+convert(varchar(10),((@pageindex-1) * @PageSize+1))+' and '
+convert(varchar(10), @pageindex * @PageSize)
exec (@AllowPagingSql)
end

set @AllowPagingSql='select
case
when count(*)%'+convert(varchar(10),@PageSize)+'=0 then count(*)/'+convert(varchar(10),@PageSize)+'
when count(*)%'+convert(varchar(10),@PageSize)+'<>0 then count(*)/'+convert(varchar(10),@PageSize)+'+1
end as pageCount,count(*) as RowsCount from ('+@SqlSelect+') as tab1'
exec (@AllowPagingSql)

我姓区不姓区 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 CutBug 的回复:]
用DataView RowFilter
DataView dv = new DataView(GridView.DataSource as DataTable);
dv.Sort = "";
dv.RowFilter = "";
GridView.DataSource = dv ;//重新绑定
GridView.DataBind();


[/Quote]
up
阿非 2009-03-10
  • 打赏
  • 举报
回复

<asp:GridView ID="gv1" runat="server"></asp:GridView>



protected DataTable getDataTableDepartment()
{

System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("ID", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("Caption", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("ManagerID", typeof(System.Int32)));
dr = dt.NewRow();
dr[0] = 1;
dr[1] = "A";
dr[2] = 1;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = "B";
dr[2] = 1;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 3;
dr[1] = "C";
dr[2] = 1;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 4;
dr[1] = "D";
dr[2] = 2;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 5;
dr[1] = "E";
dr[2] = 2;
dt.Rows.Add(dr);
return dt;
}
protected void Page_Load(object sender, EventArgs e)
{
DataView dv = getDataTableDepartment().DefaultView;
dv.RowFilter = "ManagerID=1";
gv1.DataSource = dv.Table;
gv1.DataBind();
}
chinawes 2009-03-10
  • 打赏
  • 举报
回复
ViewState是页面级变量,类似session,只是ViewState在当前页面可用。
你可以把查询出来的DataTable类型的值用ViewState保存,如下:
ViewState["dt"] = dt;
取值的时候
DataTabel dt = ViewState["dt"] as DataTabel,
然后 DataRow[] drs = dt.Select("column1 is null");
笨方法的话,可以把数组遍历手动添加个DataTabel.
最后把组合的DataTabel绑定到GridView。
阿云ivan 2009-03-10
  • 打赏
  • 举报
回复
你可以重新new一个datatable,用来存放Select查询出来的DataRow数组呀
CutBug 2009-03-10
  • 打赏
  • 举报
回复
用DataView RowFilter
DataView dv = new DataView(GridView.DataSource as DataTable);
dv.Sort = "";
dv.RowFilter = "";
GridView.DataSource = dv ;//重新绑定
GridView.DataBind();

the_pain 2009-03-10
  • 打赏
  • 举报
回复

DataTable dt = new DataTable();
dt = ds.Tables[0];
DataRow[] dr = dt.Select("EquipmentID='" + sbid + "'");
DataView dv = new DataView(dt);
dv.RowFilter = "EquipmentID='" + sbid + "'";
this.GridView1.DataSource = dv;
this.GridView1.DataBind();

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧