我在C#Winforms中使用GridView创建了一个日历。我试图获取所有选定单元格的值。
点击一个简单的按钮,输出应为: 2,5,8,10,13,18,21,26,29
我很难找到获取所有选定单元格的日期/值的方法。任何想法都非常感谢。谢谢!
答案 0 :(得分: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");
}
}
}
答案 1 :(得分:1)
使用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()
。
答案 2 :(得分:0)
出于某种原因,当我尝试使用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());
}