在DataGridView中设置为DataGridTextBoxCell

本文关键字:DataGridTextBoxCell 设置 DataGridView | 更新日期: 2023-09-27 17:54:15

我试图通过检查用户是否输入了超过我的DataGridViewCell的最大允许大小来保护用户免受错误消息。

I'm making:

private void dataGridView3_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 1)
    {
        string selected = (dataGridView3[e.RowIndex, 1] as DataGridViewTextBoxCell).FormattedValue.ToString();
        if (selected.Length > 50)
        {
            dataGridView3[e.RowIndex, 1].Value = selected.Take(50).ToString();
        }
    }
}

选择的是我的文本,但是,我在更新时得到错误消息:无法将字符串转换为int32…如果我用= 0,就没有意义了。怎么了?

当我更新长度> 50的文本框时出现错误,它说我的值不是整数。但它必须是字符串。我刚刚从同一个单元格中读取了一个字符串

在DataGridView中设置为DataGridTextBoxCell

你放错了行和列

dataGridView3[e.RowIndex, 1]

应该先列后行:

dataGridView3[1, e.RowIndex]

此外,你是否必须在DataGridViewTextBoxCell上做cast ?

string selected = dataGridView3[1, e.RowIndex].FormattedValue.ToString();

和我的建议:为什么使用它在CellEndEdit,而不是在cellvalididating事件?然后可以简化为:

e.FormattedValue.ToString()

编辑单元格验证比EndEdit更频繁地触发,即使在单元格选择更改时也是如此。如果它不适合你,那么不如像你那样继续使用CellEndEdit。并且,如前所述,确保数据源保存字符串,而不是整数。顺便说一句:在我的VS中没有Take()函数,我用Substring()代替了它,试试这样:

private void dataGridView3_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 1)
    {
        string selected = dataGridView3[1, e.RowIndex].FormattedValue.ToString();
        if (selected.Length > 50)
        {
            dataGridView1[3, e.RowIndex].Value = selected.Substring(0, 50);
        }
    }
}

您必须将字符串转换为正确的整型值。

您正在尝试用字符串设置整型值,但它无法进行转换。
相关文章:
  • 没有找到相关文章