#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());
}