2017-05-29 92 views
1

我正在使用Windows窗體的c#中工作。隱藏DataGridView中的空列

我命名objGridView項目DataGridView,像這樣使用:

public partial class dlgDetailsObj : Form 
{ 
    public dlgDetailsObj(myInterface item) 
    { 
     InitializeComponent(); 

     objGridView.DataSource = new BindingList<dlgItem>(); 
     var t = new Task(() => 
     { 
      List<dlgItem> listElements = new List<dlgItem>(); 
      if (item is List<Person>) 
      { 
       List<Person> list = (List<Person>)item; 
       foreach (Person person in list) 
       { 
        listElements.Add(new dlgItem() 
        { 
         Name = person.Name, 
         Forname = person.Forname 
        }); 
       } 
      } 
      else if (item is List<Compagny>) 
      { 
       List<Compagny> list = (List<Compagny>)item; 
       foreach (Compagny compagny in list) 
       { 
        listElements.Add(new dlgItem() 
        { 
         Compagny = compagny.Name 
        }); 
       } 
      } 
      else 
      { 
       return; 
      } 

      foreach (dlgItem item in listElements) 
      { 
       objGridView.Invoke((MethodInvoker)delegate 
       { 
        int sel = objGridView.GetSelectedRowIndex(); 
        ((BindingList<dlgItem>)objGridView.DataSource).Add(item); 
        objGridView.SetSelectedRowIndex(sel); 
       }); 
      } 
     }); 
     t.Start(); 
    } 
} 

internal class dlgItem 
{ 
    public string Name { get; set; } 
    public String Forname { get; set; } 
    public String Compagny { get; set; } 
} 

dlgDetailsObj用於顯示人/公司的名單,可能更多的對象後。

我的DataGridView有一個填充dlgItem的DataSource。實際上,所有三個字段都顯示出來,即使我只有一個字段。

如何將我的代碼定義爲僅當綁定字段不爲空時才顯示列?

回答

1

如果要隱藏你可以通過DataSource訪問集合所有空列,以確定任何dlgItem對象相應的屬性是否已設置:

public dlgDetailsObj(myInterface item) 
{ 
    InitializeComponent(); 

    objGridView.DataSource = new BindingList<dlgItem>(); 
    var t = new Task(() => 
    { 
     ... 
    }); 
    t.Start(); 

    t.ContinueWith(task => 
    { 
     bool displayNameColumn = false; 
     bool displayFornameColumn = false; 
     bool displayCompanyColumn = false; 
     foreach (dlgItem item in (BindingList<dlgItem>)objGridView.DataSource) 
     { 
      if (!string.IsNullOrEmpty(item.Name)) 
       displayNameColumn = true; 
      if (!string.IsNullOrEmpty(item.Forname)) 
       displayFornameColumn = true; 
      if (!string.IsNullOrEmpty(item.Compagny)) 
       displayCompanyColumn = true; 
     } 
     objGridView.Columns[0].Visible = displayNameColumn; 
     objGridView.Columns[1].Visible = displayFornameColumn; 
     objGridView.Columns[2].Visible = displayCompanyColumn; 
    }, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); 
} 
+0

正是我一直在尋找! –