You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataGridView单元格值修改遇阻:类型不匹配问题求助

解决DataGridView绑定列表时字符串转double列的问题

核心原因

绑定的数据源列类型为double,直接输入或填充字符串会触发类型不匹配错误,必须先完成字符串到double的类型转换。

解决方案1:操作数据源添加新行(推荐,绑定模式下优先)

DataGridView绑定列表后,行数据由数据源驱动,直接操作列表而非DataGridView行更可靠:

// 假设你的实体类为SendData,目标double类型属性为TargetDoubleProperty
var newDataItem = new SendData
{
    Readtime = DateTime.Now,
    // 把要填充的字符串转换为double,建议用TryParse避免转换失败异常
    TargetDoubleProperty = double.TryParse("你的字符串值", out var num) ? num : 0 // 转换失败可设默认值或做其他处理
};

// 将新对象添加到数据源列表
data.Add(newDataItem);

// 重新绑定数据源(刷新DataGridView)
DataGridViewDatas.DataSource = null;
DataGridViewDatas.DataSource = RadioButtonSortByFirst.Checked 
    ? data 
    : data.OrderByDescending(d => d.Readtime).ToList();

解决方案2:处理单元格输入的类型转换(用户手动输入场景)

如果是用户在DataGridView单元格直接输入字符串,可通过CellParsing事件处理转换逻辑,避免报错:

private void DataGridViewDatas_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
    // 替换为你的目标列名称
    if (DataGridViewDatas.Columns[e.ColumnIndex].Name != "TargetDoubleColumn") return;

    if (e.Value is string inputStr)
    {
        if (double.TryParse(inputStr, out double parsedValue))
        {
            e.Value = parsedValue;
            e.ParsingApplied = true;
        }
        else
        {
            // 转换失败时提示用户并取消编辑
            MessageBox.Show("请输入有效的数字格式");
            e.Cancel = true;
        }
    }
}

注意事项

  • 绑定模式下不要直接调用DataGridView.Rows.Add()添加行,操作数据源列表后重新绑定才是正确方式
  • 使用double.TryParse替代double.Parse,可以避免输入非法字符时抛出异常,提升程序稳定性

内容的提问来源于stack exchange,提问作者Mert Atmaca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:52:17