Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET中从datatable/dataview中选择前n行_C#_Asp.net_Ado.net - Fatal编程技术网

C# 如何在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]);

如何在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]);
     }

     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