2010-10-18 121 views
1

我綁定數據集到datagridview,我想給用戶刪除(可能通過複選框?)列,他不知道看到的可能性。從datagridview動態刪除列

所以,一開始他看到5列,他只想看看三個,所以他點擊了一些東西,這些列消失了。

你用什麼來給用戶這個功能?

回答

1

我相信你可以通過設置特定的列可見標誌爲false來實現這一點。

+0

我知道這個竅門,因爲它看起來對用戶來說確實很好,所以我想到列標題的複選框(當他點擊它時,列會消失),但我不知道它是否是最好的解決方案 – user278618 2010-10-18 20:38:22

+0

你可以添加一個可以顯示和隱藏的切換檢查菜單項目的菜單,還可以增強菜單項目和上下文菜單。如果您有多個列,我認爲表單上的複選框本身會從UI角度看太多。如果你想到Windows任務管理器,顯示/隱藏列在菜單中。 – pstrjds 2010-10-18 21:00:55

2

如果你使用一個複選框,你有這樣的事情:

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox c = (CheckBox)sender; 
    if (c.Checked) 
     Column1.Visible = true; 
    else 
     Column1.Visible = false; 
} 

你只修改列1名是要顯示/隱藏和事件鏈接到正確的複選框(無論柱ES)。

在表單的構造函數中,我會做類似Checkbox1.checked = true;的操作,所以第一個_CheckChanged會隱藏它,但這取決於您。

+0

這是相當不錯的,但每列應該有一個複選框,我不會說這些想法與複選框是最好的 – user278618 2010-10-18 20:48:08

+0

真實的,有不同的方式去做;基本上鍊接某種類型的事件(onclick,checkchanged,不管)來隱藏列;只是在這裏給出一個示例代碼 - 沒有看到任何實際的代碼,我不能真正建議任何更特定於某種需求的東西 – Adam 2010-10-18 20:49:52

1

我建議如下:

創建checkedListBox,並給它添加一個複選框項在網格中的每個列,這是代碼:

foreach (DataGridViewColumn column in dataGridView1.Columns) 
     { 
      checkedListBox1.Items.Add(column.HeaderText, column.Visible); 
      checkedListBox1.ItemCheck += (ss, ee) => 
       { 
        if (checkedListBox1.SelectedItem != null) 
        { 
         var selectedItem = checkedListBox1.SelectedItem.ToString(); 
         dataGridView1.Columns[selectedItem].Visible = ee.NewValue == CheckState.Checked; 
        } 
       }; 
     } 

祝你好運!