2013-11-28 81 views
3

有沒有辦法讓用戶只在數據網格中選擇一行DataGrid中只有一個行選擇單元格

例如應用戶可以這樣做:

enter image description here

,他應該不能做到:

enter image description here

我看到這一點,但沒有看到如何使用我的問題: https://stackoverflow.com/a/3072929/1764978

我想在DataGrid中使用SelectionChanged,但是當我改變所選單元格它不觸發,僅僅只有SelectedCellsChanged並沒有Handled,物業

編輯

當使用ethicallogics IM解決方案我得到: enter image description here

我選擇一整行..那不是我想要什麼

回答

2

這可能是優化的,但這對我有用。

它跟蹤第一個選定的項目,即行,如果在該行之外有選擇,它將刪除整個選擇(並用新選擇的單元替換它)。它可能會增強,可能是爲了恢復最初的選擇,但我的用例並不需要。

無論如何,看看這是否適合你。

private object selectedItem; 

private void DataGrid_OnSelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
{ 
    var dg = (sender as DataGrid); 

    if (selectedItem == null) 
     selectedItem = e.AddedCells.First().Item; 

    var allInSameRow = e.AddedCells.All(info => info.Item == selectedItem); 

    if (!allInSameRow) 
    { 
     dg.SelectedCells.Clear(); 
     selectedItem = null; 
    } 
} 
+0

我改變了一下,它只適用於我。 –

0

試試這個

<DataGrid SelectionMode="Single" SelectionUnit="Cell" 
+0

看到編輯我的問題 –

+0

我更新了答案集selectionUnit =「細胞」 – ethicallogics

+0

,所以我只能選擇一個小區,但我想在一行中選擇一個以上的細胞,而不是全行 –

0

我目前正在研究類似的東西,並且我正在爲每個想要創建的記錄創建字符串變量。我用這行代碼:

string somename = ((DataRowView)DataGridName.SelectedItem).Row["ColumnName"].ToString(); 

這個代碼將只需要一個小區(這取決於哪個記錄將被存儲在該變量中的ColumnName的)從用戶所選擇的行。

+0

我不知道這應該如何工作。 –

1

如果我的猜測是正確的:你想要的是

1)允許用戶從整個電網中選擇一個單元格。

2)第一次選擇後,您希望用戶不要從任何其他行中選擇任何單元格。 3)如果用戶想要選擇多個單元格,則允許他這樣做,但是在他選擇第一個單元格的同一行中。

我不知道確切的解決方案,或者我沒有任何代碼可以指導您。

但是,如果您可以在第一次選擇時禁用其他行。

0
int _selectedRow = -1; 
int _selectedColumn = -1; 
private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
{ 
    switch (dataGridView1.SelectedCells.Count) 
    { 
     case 0: 
      // store no current selection 
      _selectedRow = -1; 
      _selectedColumn = -1; 
      return; 
     case 1: 
      // store starting point for multi-select 
      _selectedRow = dataGridView1.SelectedCells[0].RowIndex; 
      _selectedColumn = dataGridView1.SelectedCells[0].ColumnIndex; 
      return; 
    } 

    foreach (DataGridViewCell cell in dataGridView1.SelectedCells) 
    { 
     if (cell.RowIndex == _selectedRow) 
     { 
      if (cell.ColumnIndex != _selectedColumn) 
      { 
       _selectedColumn = -1; 
      } 
     } 
     else if (cell.ColumnIndex == _selectedColumn) 
     { 
      if (cell.RowIndex != _selectedRow) 
      { 
       _selectedRow = -1; 
      } 
     } 
     // otherwise the cell selection is illegal - de-select 
     else cell.Selected = false; 
    } 
} 
+0

在WPF中使用DataGrid而不是DataGridView! –

相關問題