【问题标题】:C# cast is not validC# 强制转换无效
【发布时间】:2014-04-29 13:19:03
【问题描述】:

在我的 c# 程序中,我有一个列表视图点击事件。这是我的代码:

private void factorLV_Click(object sender, EventArgs e)
{
  try
{
    if (listview1.SelectedItems.Count == 0)
        return;
    listview2.Items.Clear();
    listview2.Show();
    DataClasses1DataContext db = new DataClasses1DataContext();
    List<ReportFactorResult> list = db.ReportFactor(Convert.ToInt32(listview1.SelectedItems[0].SubItems[0].Text)).ToList<ReportFactorResult>();
    foreach (ReportFactorResult val in list)
    {
        ListViewItem lst = new ListViewItem((Convert.ToString(listview2.Items.Count + 1)).ToString());
        lst.SubItems.Add(val.storeName);
        lst.SubItems.Add(val.Code.ToString());
        lst.SubItems.Add(val.factorNumber.ToString());
        lst.SubItems.Add(val.salePrice.ToString());
        listview2.Items.Add(lst);
    }
}
  catch(Exception ex)
{
   messageBox.show(ex.message);
}
}

当我在 Visual Studio 中运行程序时,它可以正常工作。但是当我在 Visual Studio 环境中运行 .exe 时,它​​遇到了这个异常:

指定的演员表无效

下图显示了没有 try catch 的异常。当我使用 try catch 时,我也收到“Specified cast...”消息。

http://i59.tinypic.com/2qkl3qg.png

另外,在 Visual Studio 中,我的程序远程连接到 sql server 管理,但在 Visual Studio 外部,我连接到 SQLExpress 中的已恢复数据库。

【问题讨论】:

  • 我猜在 Visual Studio 之外你有不同的数据,Convert.ToInt32() 失败了。我想在所选项目中,子项目索引 0 文本不是有效的 int。
  • 为什么 ToString() 两次? (Convert.ToString(listview2.Items.Count + 1)).ToString()
  • @GrantWinney:no 因为是windows异常,只显示功能。
  • ReportFactor 返回什么?我想这就是问题所在。发布完整的错误消息。
  • @Majid 为了避免这种混淆,最好更新您的问题。我们现在正在查看与您的不同的代码。这让帮助你变得非常困难。

标签: c# listview exception


【解决方案1】:

显示堆栈跟踪后,您的问题就更清楚了。

目前您的问题在于将您的 sql 字段映射到 ReportFactorResult。特别是 ReportFactorResult 有一个 int64 字段,它在您的数据库中具有不同的字段类型。

如需进一步帮助,我们需要查看ReportFactorResult 和您的数据库方案。但是,如果您查看 ReportFactorResult 类并搜索那里的所有 int64 字段,您可能会自己找到有问题的字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2014-05-09
    • 1970-01-01
    • 2011-01-28
    • 2015-01-06
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多