Получить выбранные значения ячеек

#c# #winforms #datagridview #devexpress

#c# #winforms #datagridview #devexpress

Вопрос:

Я создал календарь, используя GridView в C # Winforms. Я пытаюсь получить значения всех выбранных ячеек.

введите описание изображения здесь

При простом нажатии кнопки вывод должен быть: 2, 5, 8, 10, 13, 18, 21, 26, 29

Мне трудно найти способ получить даты / значения всех выбранных ячеек. Любая идея высоко ценится. Спасибо!

Ответ №1:

Попробуйте этот код:

             private void selectedCellsButton_Click(object sender, System.EventArgs e)
            {
                Int32 selectedCellCount =
                    dataGridView1.GetCellCount(DataGridViewElementStates.Selected);
                if (selectedCellCount > 0)
                {
                    if (dataGridView1.AreAllCellsSelected(true))
                    {
                        MessageBox.Show("All cells are selected", "Selected Cells");
                    }
                    else
                    {
                        System.Text.StringBuilder sb =
                            new System.Text.StringBuilder();

                        for (int i = 0;
                            i < selectedCellCount; i  )
                        {
                            sb.Append(dataGridView1.SelectedCells[i].Value.ToString()) ;


                      MessageBox.Show(sb.ToString(), "Selected Cells");

                    }
                }
            }
  

Ответ №2:

Используйте DataGridView.Свойство SelectedCells и метод расширения LINQ Enumerable.Cast

 var values = gridView.SelectedCells.Cast<DataGridViewCell>().Select(cell => cell.Value);
string output = string.Join(", ", selectedValues);
  

values будет иметь тип IEnumerable<object> , потому что DataGridViewCell.Value возвращает object тип.

string.Join будет использовать StringBuilder и вызывать .ToString() для каждого элемента в коллекции.

Ответ №3:

По какой-то причине я столкнулся с ошибками, когда попытался использовать коды Fabio и H.Fadlallah. Возможно, это из-за компонентов DevEx, которые я использовал. Хотя они помогли мне создать код, который я использую сейчас.

В любом случае, ниже показан код, который я использовал, который каким-то образом дает мне то, что мне нужно.

     private void btnSubmit_Click(object sender, EventArgs e)
    {
        StringBuilder xTokens = new StringBuilder();
        GridCell[] xCell = xgvCalendar.GetSelectedCells();

        for (int i = 0; i < xCell.Count(); i  )
        {
            int xRow = xCell[i].RowHandle;
            xTokens.Append(dtpTransDate.Value.ToString("MMMM")   " "   xgvCalendar.GetRowCellValue(xRow, xCell[i].Column.ToString()).ToString()   ", "   dtpTransDate.Value.ToString("yyyy"));
            if (i != xCell.Count()-1) xTokens.Append(" - ");
        }

        MessageBox.Show(xTokens.ToString());
    }