首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在DataGridView中将值设置为DataGridTextBoxCell

在DataGridView中将值设置为DataGridTextBoxCell
EN

Stack Overflow用户
提问于 2011-05-03 18:52:13
回答 2查看 1.7K关注 0票数 0

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

我做的是:

代码语言:javascript
运行
复制
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的文本框时出错,它说我的值不是整数。但它必须是一个字符串。我刚从同一个单元格读取了一个字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-03 19:12:23

您将行和列放错了

代码语言:javascript
运行
复制
dataGridView3[e.RowIndex, 1]

首先是列,然后是行:

代码语言:javascript
运行
复制
dataGridView3[1, e.RowIndex]

另外,你一定要在DataGridViewTextBoxCell上选角吗?它对我来说很有效:

代码语言:javascript
运行
复制
string selected = dataGridView3[1, e.RowIndex].FormattedValue.ToString();

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

代码语言:javascript
运行
复制
e.FormattedValue.ToString()

编辑单元格验证比EndEdit更频繁地触发:即使在单元格选择更改时也是如此。如果对你来说不好,那就像以前一样使用CellEndEdit。如前所述,确保数据源包含字符串,而不是整数。顺便说一句:在我的VS中没有Take()函数,我将其替换为Substring(),尝试如下所示:

代码语言:javascript
运行
复制
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);
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2011-05-03 18:56:18

您必须将字符串转换为正确的Integer值。您正在尝试使用字符串设置Integer值,但它无法执行转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5868360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档