Comment sélectionner les n premières rangées dans un datatable/dataview dans ASP.NET? Actuellement, j'utilise le code suivant, en passant la table et le nombre de lignes pour obtenir les enregistrements. Y a-t-il un meilleur moyen?
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;
}
Dans le cadre 3.5, dt.Rows.Cast<System.Data.DataRow>().Take(n)
Sinon, la façon dont vous avez mentionné
Je viens d'utiliser la réponse de Midhat, mais j'ai ajouté CopyToDataTable()
à la fin.
Le code ci-dessous est une extension de la réponse que j'ai utilisée pour activer rapidement la pagination.
int pageNum = 1;
int pageSize = 25;
DataTable dtPage = dt.Rows.Cast<System.Data.DataRow>().Skip((pageNum - 1) * pageSize).Take(pageSize).CopyToDataTable();
myDataTable.AsEnumerable().Take(5).CopyToDataTable()
Vous pouvez modifier la requête. Si vous utilisez SQL Server à l'arrière, vous pouvez utiliser la requête Select top n
pour un tel besoin. Les implémentations actuelles récupèrent l’ensemble des données de la base de données. En sélectionnant uniquement le nombre de lignes requis, vous améliorerez également vos performances.
La vue des données est bonne. Caractéristique de la table de données. Nous pouvons filtrer la table de données selon nos exigences à l'aide de la vue des données. Sous Fonctions, c’est Après la liaison de la table de données à la source de données de la liste, puis filtrer par contrôle de zone de texte. (Cette condition peut être modifiée selon vos besoins .Contains (txtSearch.Text.Trim ()))
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
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;
}