C# 如何在ASP.NET中从datatable/dataview中选择前n行
如何在ASP.NET中从datatable/dataview中选择前n行?目前我正在使用以下代码,传递表和行数以获取记录。有更好的办法吗C# 如何在ASP.NET中从datatable/dataview中选择前n行,c#,asp.net,ado.net,C#,Asp.net,Ado.net,如何在ASP.NET中从datatable/dataview中选择前n行?目前我正在使用以下代码,传递表和行数以获取记录。有更好的办法吗 public DataTable SelectTopDataRow(DataTable dt, int count) { DataTable dtn = dt.Clone(); for (int i = 0; i < count; i++) { dtn.ImportRow(dt.Rows[i]);
public DataTable SelectTopDataRow(DataTable dt, int count)
{
DataTable dtn = dt.Clone();
for (int i = 0; i < count; i++)
{
dtn.ImportRow(dt.Rows[i]);
}
return dtn;
}
public DataTable SelectTopDataRow(DataTable dt,int count)
{
DataTable dtn=dt.Clone();
for(int i=0;i
在框架3.5中,dt.Rows.Cast().Take(n)
否则,您可以按照前面提到的方式修改查询。如果您在后面使用SQL Server,则可以使用
Select top n
query来满足此类需求。当前实现从数据库中获取整个数据。仅选择所需的行数也会提高性能。我刚才使用了Midhat的答案,但在末尾附加了CopyToDataTable()
下面的代码是我用来快速启用某些分页的答案的扩展
int pageNum = 1;
int pageSize = 25;
DataTable dtPage = dt.Rows.Cast<System.Data.DataRow>().Skip((pageNum - 1) * pageSize).Take(pageSize).CopyToDataTable();
intpagenum=1;
int pageSize=25;
DataTable dtPage=dt.Rows.Cast().Skip((pageNum-1)*pageSize.Take(pageSize.CopyToDataTable();
公共数据表TopDataRow(数据表dt,整数计数)
{
DataTable dtn=dt.Clone();
int i=0;
foreach(数据行中的数据行)
{
如果(i计数)
打破
}
返回dtn;
}
如果希望行数灵活,可以在SQL中添加行数。对于SQL server:
从myTable中选择(按myOrder排序)行编号*上的行编号()
然后根据行号过滤数据表:
Dataview dv=new Dataview(dt,“行号数据视图是数据表的良好特性。我们可以使用数据视图根据我们的要求过滤数据表。下面的函数是将数据表绑定到列表框数据源后,然后通过文本框控件过滤。(此条件可以根据需要更改。包含(txtSearch.text.Trim()))
您是否仍在为您的查询寻找满意的答案?否则,您可能会指出满足您期望的答案。这仍然会从数据库中获取所有数据。限制查询中的行数可以提高性能,同时避免不必要的数据加载和内存使用。如果我们将其绑定到datagridview,则会执行更新操作我不喜欢简单的分页代码。请考虑包含一些关于你答案的信息,而不是简单地张贴代码。我们试图提供不仅仅是“修复”,而是帮助人们学习。你应该解释原始代码中的错误,你做了什么不同的事情,以及为什么你的改变。有效。此解决方案应避免处理数据表中的所有(可能很多)行,对吗?
myDataTable.AsEnumerable().Take(5).CopyToDataTable()
public DataTable TopDataRow(DataTable dt, int count)
{
DataTable dtn = dt.Clone();
int i = 0;
foreach (DataRow row in dt.Rows)
{
if (i < count)
{
dtn.ImportRow(row);
i++;
}
if (i > count)
break;
}
return dtn;
}
Private Sub BindClients()
okcl = 0
sql = "Select * from Client Order By cname"
Dim dacli As New SqlClient.SqlDataAdapter
Dim cmd As New SqlClient.SqlCommand()
cmd.CommandText = sql
cmd.CommandType = CommandType.Text
dacli.SelectCommand = cmd
dacli.SelectCommand.Connection = Me.sqlcn
Dim dtcli As New DataTable
dacli.Fill(dtcli)
dacli.Fill(dataTableClients)
lstboxc.DataSource = dataTableClients
lstboxc.DisplayMember = "cname"
lstboxc.ValueMember = "ccode"
okcl = 1
If dtcli.Rows.Count > 0 Then
ccode = dtcli.Rows(0)("ccode")
Call ClientDispData1()
End If
End Sub
Private Sub FilterClients()
Dim query As EnumerableRowCollection(Of DataRow) = From dataTableClients In
dataTableClients.AsEnumerable() Where dataTableClients.Field(Of String)
("cname").Contains(txtSearch.Text.Trim()) Order By dataTableClients.Field(Of
String)("cname") Select dataTableClients
Dim dataView As DataView = query.AsDataView()
lstboxc.DataSource = dataView
lstboxc.DisplayMember = "cname"
lstboxc.ValueMember = "ccode"
okcl = 1
If dataTableClients.Rows.Count > 0 Then
ccode = dataTableClients.Rows(0)("ccode")
Call ClientDispData1()
End If
End Sub