获取选定的单元格值

时间:2016-10-22 17:52:14

标签: c# winforms datagridview devexpress

我在C#Winforms中使用GridView创建了一个日历。我试图获取所有选定单元格的值。

enter image description here

点击一个简单的按钮,输出应为: 2,5,8,10,13,18,21,26,29

我很难找到获取所有选定单元格的日期/值的方法。任何想法都非常感谢。谢谢!

3 个答案:

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