2011-09-26 133 views
1

我在窗體中有一個DataGridView。功能如下。如何在DataGridView中選擇多個單元格

  • 單擊標題選擇整個列。
  • 點擊比列標題之外的任何細胞選擇整個行

我已多選設置爲true。我可以通過使用鼠標來選擇多個單元格。但我想以編程方式進行。

回答

6

如果您有多項選擇真正爲您DataGridView,那麼你可以通過電網和設置所需的行作爲Selected

環(還您dataGridView.SelectionMode應該是FullRowSelect

dataGridView.Rows[0].Selected = true;//determine index value from your logic 
dataGridView.Rows[5].Selected = true; 

編輯

而不是行選擇,那麼你可以嘗試這個邏輯,訂閱rowheaderclick事件,其中你會得到它被點擊的行索引,現在循環遍歷列並設置每個單元格被選中(與上面類似)

對於HeaderClick事件,您可以使用列索引的相同方式,現在循環行並設置選定的行索引。

datagridview1[columnindex, rowindex].Selected = true 

對於行rowindex將被固定,而對於列選擇columnindex將是固定的。

希望這可以幫助你。

+0

感謝您的回覆。但上述方法不能解決問題,因爲我必須單擊列標題來選擇整個列。如果SelectionMode設置爲「FullRowSelect」 – Bimal

+0

檢查我的編輯這應該與CellSelect模式工作 – V4Vendetta

+0

這工作。謝謝 – Bimal

0

在嘗試選擇(多個)項目之前,允許DataGridView完成加載其數據非常重要。您可以在DataBindingComplete事件處理程序中執行此操作。 下面是一個工作示例:

List<int> items = new List<int>() { 2, 4 }; 
    private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
    { 
     dataGridView1.ClearSelection(); 

     int lastItem = 0; // Save the last match to scroll to it later 
     bool cellSelected = false; 

     for (int i = dataGridView1.Rows.Count - 1; i >= 0; i--) 
     { 
      if (items.Contains((int)dataGridView1.Rows[i].Cells[0].Value)) 
      { 
       lastItem = i; 

       dataGridView1.Rows[i].Selected = true; 

       if (!cellSelected) // gotta select only one cell 
       { 
        dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[0]; 
        cellSelected = true; 
       } 
      } 
     } 

     dataGridView1.FirstDisplayedScrollingRowIndex = lastItem; 
    } 
相關問題