"DataGridViewCell.Value = x" 没有……什么都没有?

"DataGridViewCell.Value = x" does... nothing?

我正在尝试在释放 ctrl 键时更改一组选定单元格的值。

        private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.ControlKey)
        {
            foreach (DataGridViewCell c in dataGridView1.SelectedCells)
            {
                c.ReadOnly = false;
                c.Style.BackColor = colorDialog1.Color;
                c.ValueType = currentSymbol.GetType();
                c.Value = currentSymbol;

                dataGridView1.BeginEdit(true);
                dataGridView1.EndEdit();
            }
        }
    }

出于某种原因,行 "c.Value = currentSymbol;" 没有任何作用。

c.Value 无缘无故保持为空。

我已经尝试了所有我能想到的方法,但 Value 成员仍然为 null。

我开始记起为什么我停止使用默认的 dataGridView,使用它们是一个令人沮丧的噩梦,而且从不按照文档行事。不幸的是我必须为这个项目使用一个。

我在这里错过了什么?我从来没有见过一个 set 命令在没有抛出任何错误的情况下简单地违反。

编辑:对 OP 有用的是删除他的 DataGridVeiw 并添加一个新的,分配事件处理程序等。

试试这个对我有用的例子。制作一个新的 C# winforms 应用程序并放置一个 datagridview。

using System;
using System.Windows.Forms;
using System.Drawing;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var c = new DataGridViewTextBoxCell();
            c.ReadOnly = false;
            this.dataGridView1.Columns.Add(new DataGridViewColumn(c));
            this.dataGridView1.Rows.Add(5);
            this.dataGridView1.KeyUp += new KeyEventHandler(dataGridView1_KeyUp);
        }

        private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
        {
            var currentSymbol = "test";
            if (e.KeyCode == Keys.ControlKey)
            {
                foreach (DataGridViewCell c in dataGridView1.SelectedCells)
                {
                    c.ReadOnly = false;
                    c.Style.BackColor = Color.White;
                    c.Style.ForeColor = Color.Black;
                    c.ValueType = currentSymbol.GetType();
                    c.Value = currentSymbol;
                    dataGridView1.BeginEdit(true);
                    dataGridView1.EndEdit();
                }
            }
        }
    }
}

如果它也适用于您,那么您的示例中一定有其他地方您的做法有所不同。