web-dev-qa-db-fra.com

Trouver une ligne dans datatable avec un identifiant spécifique

J'ai deux colonnes dans un datatable:

ID, Calls. 

Comment trouver quelle est la valeur de Calls where ID = 5?

5 pourrait être n'importe quel nombre, c'est juste par exemple. Chaque ligne a un identifiant unique. 

33
RSM

Créez un critère de chaîne à rechercher, comme ceci:

string searchExpression = "ID = 5"

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

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

Vous pouvez maintenant parcourir 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

    }
}
56
Karl Anderson

Vous pouvez utiliser LINQ to DataSet/DataTable

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

Puisque chaque ligne a un identifiant unique, vous devez utiliser Single/SingleOrDefault qui lève une exception si vous récupérez plusieurs enregistrements. 

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

(Remplacez int par le type de votre champ ID)

37
Habib

Vous pouvez essayer avec la méthode select

DataRow[] rows = table.Select("ID = 7");
11
marcello

Je pourrais utiliser le code suivant. Merci tout le monde.

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);
6
Kamil KIZILTAŞ
DataRow dataRow = dataTable.AsEnumerable().FirstOrDefault(r => Convert.ToInt32(r["ID"]) == 5);
if (dataRow != null)
{
    // code
}

S'il s'agit d'un DataSet typé:

MyDatasetType.MyDataTableRow dataRow = dataSet.MyDataTable.FirstOrDefault(r => r.ID == 5);
if (dataRow != null)
{
    // code
}
3
va.

essayez ce code

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

mais mis au bail une clé primaire

2
Tanmay Nehete

Bonjour, créez simplement une fonction simple, comme ci-dessous. Elle renvoie toutes les lignes pour lesquelles le paramètre d’appel entré est valide ou vrai.

 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 appelez-le simplement comme indiqué ci-dessous;

  DataTable RowsFound=SearchRecords("IdColumn", OriginalTable,5);

où 5 est l'ID . Merci .. 

1
Sunday Efeh

Essayez d'éviter les boucles inutiles et optez pour cela 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 par ID spécifique, une table doit contenir une clé primaire.

0
Mohd Sadiq