【问题标题】:Input string was not in a correct format - trying to insert string value to int typed datagridview cell输入字符串的格式不正确 - 尝试将字符串值插入 int 类型的 datagridview 单元格
【发布时间】:2014-07-29 16:36:20
【问题描述】:

我正在尝试填写 telerik radDataGridView(同样的问题也发生在普通的 dataGridView 上)。
我的 db 表中的一列名为 [updateType]。

'type' 在枚举中描述:

public enum TypeEnum
{
    INSERT = 0,
    UPDATE_OR_INSERT = 1,
    UPDATE = 2,
    DELETE_OR_INSERT = 3
};

我正在 Load 事件中填充 dataGridView (dgv)

private void Form1_Load(object sender, EventArgs e)
{
  this.table1TableAdapter.Fill(this.tempdbDataSet.Table1);

  for (int i = 0; i < dgv.RowCount; i++)
  {
    switch ((int)dgv.Rows[i].Cells[2].Value)
    {
      case (int)TypeEnum.INSERT:
            dgv.Rows[i].Cells[2].Value = "INSERT";
            break;
      case (int)TypeEnum.UPDATE_OR_INSERT:
            dgv.Rows[i].Cells[2].Value = "UPDATE/INSERT";
            break;
      case (int)TypeEnum.UPDATE:
            dgv.Rows[i].Cells[2].Value = "UPDATE";
            break;
      case (int)TypeEnum.DELETE_OR_INSERT:
            dgv.Rows[i].Cells[2].Value = "INSERT/DELETE";
            break;
      default:
            break;
    }
  }
}

但它失败了,当尝试将 string 值填充到 int 类型的 gridview 单元格时,
抛出异常输入字符串格式不正确

感谢任何可以解决此问题的人。

【问题讨论】:

  • 究竟在哪一行?
  • 检查这一行:switch ((int)dgv.Rows[i].Cells[2].Value)。从数据库中获取的值似乎不是 int 类型。
  • 我不明白。您有一个您知道属于int 类型的列,然后您尝试将string 值填充到其中并且不明白为什么它不喜欢这样?跨度>
  • 如果 Telerik 的控件值得一试,它将支持列显示别名功能,您可以将单元格值设置为一个值,但设置不同的对应显示值。

标签: c# winforms datagridview telerik radgridview


【解决方案1】:

我以不同的方式解决了我的问题。
而不是用表格适配器填充数据网格视图, 我已经一步一步地构建了它。 例如:

//---

for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)
        dgv.Rows.Add(dataset.Tables[0].Rows[i].ItemArray[0].ToString(),
                     dataset.Tables[0].Rows[i].ItemArray[1].ToString(),
                     GetEnumString((int)dataset.Tables[0].Rows[i].ItemArray[2]));

//---

private string GetEnumString(int n)
{
   switch (n)
   {
      case (int)TypeEnum.INSERT:
           return "INSERT";
      case (int)TypeEnum.UPDATE:
           return "UPDATE";
      case (int)TypeEnum.UPDATE_OR_INSERT:
           return "UPDATE/INSERT";
      case (int)TypeEnum.DELETE_OR_INSERT:
           return "INSERT/DELETE";
      default: return "";
      }
   }
}

public enum TableUpdateModeEnum
{
   INSERT = 0,
   UPDATE_OR_INSERT = 1,
   UPDATE = 2,
   DELETE_OR_INSERT = 3
};

还是谢谢你!

【讨论】:

    【解决方案2】:

    试试

    switch ((int)dgv.Rows[i].Cells[2].Value)
    {
      case (int)TableUpdateModeEnum.INSERT:
            dgv.Rows[i].Cells[2].Value = (int)TypeEnum.INSERT;
            break;
    ...
    ...
    }
    

    【讨论】:

    • 感谢您的快速回答,但我的目的是显示枚举的“.ToString()”值,而不是将其转换为另一个 int
    • 您要放置此字符串数据的列的类型是什么?
    • 没关系——我试过设置成int或者nvarchar,问题依旧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2013-08-22
    相关资源
    最近更新 更多