【发布时间】:2017-03-04 20:42:48
【问题描述】:
我在 C# Winforms 中使用 GridView 创建了一个日历。我正在尝试获取所有选定单元格的值。
点击一个简单的按钮,输出应该是: 2、5、8、10、13、18、21、26、29
我很难找到一种方法来获取所有选定单元格的日期/值。任何想法都受到高度赞赏。谢谢!
【问题讨论】:
标签: c# winforms datagridview devexpress
我在 C# Winforms 中使用 GridView 创建了一个日历。我正在尝试获取所有选定单元格的值。
点击一个简单的按钮,输出应该是: 2、5、8、10、13、18、21、26、29
我很难找到一种方法来获取所有选定单元格的日期/值。任何想法都受到高度赞赏。谢谢!
【问题讨论】:
标签: c# winforms datagridview devexpress
由于某种原因,我在尝试同时使用 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());
}
【讨论】:
使用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()。
【讨论】:
试试这个代码:
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");
}
}
}
【讨论】: