Trouver une ligne dans datatable avec un id spécifique

j'ai deux colonnes dans un datatable:

ID, Calls. 

Comment puis je trouver la valeur des Appels est where ID = 5?

5 peut être n'importe quelnombre, c'est juste un exemple. Chaque rangée a un ID unique.

27
demandé sur RSM 2013-12-17 19:38:33

8 réponses

Faire une chaîne de critères de recherche, comme ceci:

string searchExpression = "ID = 5"

Puis .Select() méthode de l' DataTable objet, comme ceci:

DataRow[] foundRows = YourDataTable.Select(searchExpression);

Maintenant vous pouvez boucler les résultats, comme ceci:

int numberOfCalls;
bool result;
foreach(DataRow dr in foundRows)
{
    // Get value of Calls here
    result = Int32.TryParse(dr["Calls"], out numberOfCalls);

    // Optionally, you can check the result of the attempted try parse here
    // and do something if you wish
    if(result)
    {
        // Try parse to 32-bit integer worked

    }
    else
    {
        // Try parse to 32-bit integer failed

    }
}
50
répondu Karl Anderson 2013-12-17 16:09:13

vous pouvez utiliser LINQ pour DataSet / DataTable

var rows = dt.AsEnumerable()
               .Where(r=> r.Field<int>("ID") == 5);

puisque chaque ligne a un ID unique, vous devez utiliser Single/SingleOrDefault ce qui ferait une exception si vous récupérez plusieurs enregistrements.

DataRow dr = dt.AsEnumerable()
               .SingleOrDefault(r=> r.Field<int>("ID") == 5);

(remplacer int pour le type de ton champ ID)

35
répondu Habib 2013-12-17 15:40:19

Vous pouvez essayer avec la méthode select

DataRow[] rows = table.Select("ID = 7");
11
répondu marcello 2014-09-18 14:42:42

je pourrais utiliser le code suivant. Merci à tous.

int intID = 5;
DataTable Dt = MyFuctions.GetData();
Dt.PrimaryKey = new DataColumn[] { Dt.Columns["ID"] };
DataRow Drw = Dt.Rows.Find(intID);
if (Drw != null) Dt.Rows.Remove(Drw);
4
répondu Kamil KIZILTAŞ 2016-03-16 15:10:02
DataRow dataRow = dataTable.AsEnumerable().FirstOrDefault(r => Convert.ToInt32(r["ID"]) == 5);
if (dataRow != null)
{
    // code
}

Si c'est un DataSet typé:

MyDatasetType.MyDataTableRow dataRow = dataSet.MyDataTable.FirstOrDefault(r => r.ID == 5);
if (dataRow != null)
{
    // code
}
3
répondu va. 2013-12-17 15:54:09

essayez ce code

DataRow foundRow = FinalDt.Rows.Find(Value);

mais mis en location une touche primaire

1
répondu Tanmay Nehete 2015-11-30 10:20:43

Bonjour, il suffit de créer une fonction simple qui ressemble comme indiqué ci-dessous.. Renvoie toutes les lignes où le paramètre call saisi est valide ou true.

 public  DataTable SearchRecords(string Col1, DataTable RecordDT_, int KeyWORD)
    {
        TempTable = RecordDT_;
        DataView DV = new DataView(TempTable);
        DV.RowFilter = string.Format(string.Format("Convert({0},'System.String')",Col1) + " LIKE '{0}'", KeyWORD);
        return DV.ToTable();
    }

et simplement l'appeler comme indiqué ci-dessous;

  DataTable RowsFound=SearchRecords("IdColumn", OriginalTable,5);
1
répondu Sunday Efeh 2015-12-21 15:38:00

Essayez d'éviter les boucles et aller pour cette si nécessaire.

string SearchByColumn = "ColumnName=" + value;
DataRow[] hasRows = currentDataTable.Select(SearchByColumn);
if (hasRows.Length == 0)
{
    //your logic goes here
}
else
{
    //your logic goes here
}

Si vous souhaitez rechercher un numéro, puis il devrait y avoir une clé primaire dans une table.

0
répondu Mohd Sadiq 2017-10-07 14:28:22