2012-12-11 12 views
8

Voglio ottenere una riga specifica su un DataTable di asp.net e spostarlo per essere il primo su questa base DataTable su un valore di colonna column1. Il mio Datatable dt1 viene popolato tramite una query DB e il valore da cercare è tramite un'altra query da un altro DB, quindi non conosco il valore da cercare al momento dt1 select.Come spostare una riga DataTable alla prima posizione del suo DataTable

// I use this variable to search into 
// DataTable 
string valueToSearch = "some value"; 

Così ho bisogno di cercare il valore some value nel mio DataTable nella colonna column1. e quindi spostare l'intera riga nella prima posizione.

Grazie.

+0

Come è questo DataTable popolata? –

+0

@WonkotheSane attraverso una query di DataBase. La figura I ha 'column1' con valori di stringa. – anmarti

risposta

22

Dobbiamo clonare i dati di riga prima:

  DataRow[] dr = dtable.Select("column1 ='" + valueToSearch +"'"); 
      DataRow newRow = dtable.NewRow(); 
      // We "clone" the row 
      newRow.ItemArray = dr[0].ItemArray; 
      // We remove the old and insert the new 
      ds.Tables[0].Rows.Remove(dr[0]); 
      ds.Tables[0].Rows.InsertAt(newRow, 0); 
+0

soluzione brillante –

0

Se la colonna ha un solo record per il valore cercato di provare questo

DataRow[] dr = dtEmp.Select("column1 ='" + valueToSearch +"'"); 
myDataTable.Rows.InsertAt(dr[0], 0); 
+0

Non riesco a inserirlo perché appartiene già a questo datatable, quindi dovrei rimuovere preventivamente. – anmarti

+1

Dai un'occhiata a questo. non è necessario cancellare la riga e inserirla di nuovo se funziona. http://www.codeproject.com/Tips/312545/A-method-to-move-rows-within-a-DataTable –

0

si dovrà testare le prestazioni su questo, ma un modo per farlo è nella query stessa. Prendi prima le righe che vuoi all'inizio e combinale con il resto delle righe.

Dal momento non so nulla del database, ecco un modo generico per fare questo:

SELECT Column1, Column2, Column3 
FROM MyTable 
WHERE Column1 = 'some value' 

UNION 

SELECT Column1, Column2, Column3 
FROM MyTable 
WHERE Column1 <> 'some value' 
+0

Non riesco a farlo perché le origini del datatable e il valore da cercare sono diversi, quindi non conosco il valore da cercare al momento della query. – anmarti

+0

In questo caso, penso che dovresti modificare la tua domanda per inserire maggiori dettagli. Come viene popolato il datatable (incluso il binding), come viene inserito "un certo valore" come filtro, ecc. In questo momento, stiamo indovinando il tuo progetto. –

Problemi correlati