2017-03-02 6 views
0

Ich habe diese Seite der Operatoren, die zwei Tabellen mit Daten aus der Datenbank, eine Tabelle mit vorhandenen Operatoren und eine Tabelle mit vorhandenen Benutzern hat. Wenn ein Benutzer bereits ein Operator ist, möchte ich, dass diese Zeile in der Tabelle ausgeblendet wird. Hier ist mein Code:datarow Filterarray mit Datensatz C# asp net

C#:

 var userDetailsList = new List<ContactPartial>(); 
     TellusAPI.TellusUserDetails userDetails; 

     var operators = _administrationSystem.GetOperatorsInformation(userId); //DataSet 
     var getUser = webSearch.DoSearchForNameAndNumber(userId, txtSearchForOperator.Text, false, "", "", false, false, out userDetails); //Array 

     if (getUser == null) 
     { 
      userDetailsList.Add(new ContactPartial(userDetails)); 
      rptAdd.DataSource = null; 
     } 

     else 
     { 
      userDetailsList = getUser.Select(x => new ContactPartial(x)).ToList(); 

      var dv = new DataView(operators.Tables[0]); 

      foreach (var Operator in userDetailsList) 
      { 
       if (!userDetailsList.Contains(Operator)) continue; 
       dv.RowFilter = "ID = " + Operator.Id; 
      } 

      rptAdd.DataSource = userDetailsList; //Repeater 
     } 

Klasse:

/// <summary> 
/// Class for converting. 
/// </summary> 
public class ContactPartial 
{ 
    public long Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string CompanyName { get; set; } 
    public string Email { get; set; } 

    public ContactPartial(TellusUserDetails tud) 
    { 
     if (tud == null) 
     { 
      return; 
     } 

     Id = tud.UserID; 
     FirstName = tud.FirstName; 
     LastName = tud.LastName; 
     CompanyName = tud.Organisation.Description; 
     Email = tud.Email; 
    } 

    public ContactPartial(TellusSearchUserInfo tsi) 
    { 
     if (tsi == null) 
     { 
      return; 
     } 

     Id = tsi.ID; 
     FirstName = tsi.FirstName; 
     LastName = tsi.LastName; 
     CompanyName = tsi.CompanyName; 
     Email = tsi.Email; 
    } 
} 

So, jetzt vergleiche ich diese beiden und filtern Sie die Zeilen mit ID, aber es liest immer noch alle Zeilen.

+0

Können Sie einige Beispieldaten und erwartetes Ergebnis und einige Erklärungen in Ihrem Code angeben, welche Zeile was macht und was nicht erwartet? –

+0

Das erwartete Ergebnis ist, dass bei der Suche nach Benutzern in der Datenbank diejenigen herausgefiltert werden sollen, die bereits in der Operators-Tabelle enthalten sind. Ich habe die ID, die das wissen sollte. – Malphai

+0

@ChetanRanpariya Kommentar bitte lesen. – Malphai

Antwort

1
 foreach (var Operator in userDetailsList) ****** 
     { 
      if (!userDetailsList.Contains(Operator)) continue; 
      dv.RowFilter = "ID = " + Operator.Id; 
     } 

Ich sehe ein Problem mit Namenskonvention .. Sie sollten corretly mitteilen, was Operator ist und was Benutzerdaten widersprechen. Verwechsle sie nicht.

 foreach (var user in userDetailsList) 
     { 
      // Since dv is the one which contain operator details 
      if (dv.Select("ID= '" + user.Id + "'").Count > 0) 
      { 
      dv.RowFilter = "ID = " + user.Id; 
      } 
     } 
+0

Ja, Ihr Code ist nicht korrekt, ich kann 'dv.Select' nicht verwenden, da es in IntelliSense keine Auswahl für' DataView' gibt. – Malphai

+0

können Sie die dv.Table.Select verwenden – Sailor