2017-03-02 62 views
0

我有这个页面的运算符有两个表,其中包含来自数据库的数据,带有现有运算符的一个表和带有现有用户的一个表。如果用户已经是操作员,我希望该行在表格中隐藏。这里是我的代码:带数据集的数据行筛选数组c#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 
     } 

类:

/// <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; 
    } 
} 

所以我现在比较这两个,并与ID过滤行,但它仍然读取所有行。

+0

你能提供一些示例数据和预期结果,并在你的代码哪行做什么和不做什么,预计一些解释? –

+0

预期的结果是,当您搜索数据库中的用户时,您想要过滤掉已包含在操作员表中的那些用户。我有应该知道的ID。 – Malphai

+0

@ChetanRanpariya请阅读评论。 – Malphai

回答

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

我看到命名约定的一些问题。您应该正确地通知什么是运算符以及什么是用户详细信息对象。不要混淆。

 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

是的,你的代码不正确,我不能使用'dv.Select',因为在IntelliSense中没有对'DataView'的选择。 – Malphai

+0

你可以使用dv.Table.Select – Sailor