【问题标题】:Cannot convert char to an item in classlibrary in c#无法将char转换为c#中类库中的项目
【发布时间】:2021-07-20 04:29:47
【问题描述】:

对编码完全陌生,并认为在此问题之前我已经掌握了很多内容。我想将新记录保存到 sql,但试图从另一个表中捕获所选项目的 id。以为我可以使用与捕获数据列表时相同的 foreach 结构,但这是组合框中的单个记录。我在这里做错了什么?

Public Usermodel createnewlogin(Usermodel model)
{
    Using(IdataConnection connections = new System.data.Sqlclient.SqlConnection(
        GlobalConfig.cnnstring(db))
    {
        var x = new DynamicParameters();
        x.Add("@name1", model.user1);
        x.Add("@name2", model.user2);

        foreach(Profession p in model.professionid)
        {
            x = new DynamicParameters();
            x.Add("@name1", model.user1);
            x.Add("@name2", model.user2);
            x.Add("@professionid", p.id);

            Connection.Execute("dbo.madeup_insert", x, 
                commandType: CommandType.StoredProcedure);
        }

        return model;
    }
}

foreach 给出以下错误:“无法将类型 'char' 转换为 classlibrary.Profession”

professionid 是 int 类型。它是在 Usermodel 类中将 Profession 类作为一个整体标识的递增 id。当用户选择此值时,他们从 Profession 类中选择 ProfessionName,这是一个类型字符串。因此,我试图根据组合框下拉列表中选择的 ProfessionName 将与该字符串关联的一个类保存在另一个类中。用户永远不会看到也不会知道 id qt,这就是他们选择 ProfessionName 而不是 id 本身的原因。

【问题讨论】:

  • model 属于什么类型,该类型是如何定义的?看起来professionid 属性是char 的某种集合。
  • 抱歉,我想我需要包含整个内容。
  • 当您使用它时,请确保您的代码能够真正编译。它看起来像是在 Word 中自动大写的。它看起来不像 C# 代码。
  • 我更新了它,是的,它只是自动大写我手机上的所有内容。但在视觉工作室中,一切都得到了妥善处理。
  • 如果您从编辑器复制实际代码并将其粘贴到问题中,则堆栈溢出效果会更好。您和那些愿意帮助您的人可以确定您的问题不是由于转录错误造成的。

标签: c# sql winforms foreach


【解决方案1】:

在您的代码行中:

foreach(Profession p in model.professionid)

model.prefessionid 是 char 类型的对象。在该代码下,您将添加参数 p.id。我假设这是您要查找的所选项目 ID?您需要确定所选 id 来自哪个数据列表。您说您要查找的值应该是组合框中的单个记录。因此,在用户做出选择后,您应该获取 SelectedValue 属性或组合框的 Text 值,而不是 model.professionid。为此,您不需要 foreach 语句。

我需要更深入的解释或代码来帮助您获得所需的结果。

【讨论】:

  • 是的!好的,所以用户从来自 Profession 类中的职业列表的组合框中选择 ProfessionName。然后用于连接用户输入的其余数据以满足 Usermodel 类。但我不希望 ProfessionName 保存到数据库中的这个表中,我想要由 ProfessionName 来自的 id 指示的整个记录​​。
  • 那么,你想要professionid,对吗?因此,听起来ProfessionName 是组合框的DisplayMember(这是运行应用程序时组合框中显示的值)。您应该想要的是组合框的SelectedValue(当您将列表绑定到组合框时,您应该有一个DisplayMember 和一个ValueMember)。您应该将ProfessionId 设置为组合框的ValueMember。你能告诉我你填充组合框数据的代码吗?另外,您能展示一下UserModel 和Profession 模型的类吗?
  • 你所说的正是我现在正在做的。您的解决方案看起来可以工作,但我显然没有正确构建它,因为我现在收到一个错误,说它无法将 nvarchar 转换为 int ......这告诉我我仍然没有拉那个 id。我将在下面的另一条评论中发布代码
  • 私人名单currentProfessions=GlobalConfig.Connections.GetProfessions_All(); /// private void ListWireup(){ProfessionValue.Datasource = currentProfessions; ProfessionValue.DisplayMember="ProfessionName"; ProfessionValue.ValueMember="id"; } /// public class Professions{public int id{get;设置;} 公共字符串 ProfessionName{get;设置;} 公共字符串 ProfessionLevel{get;设置;} 公共字符串 ProfessionComp{get; set;}} /// public class UserModel{ public int id {get;设置;} 公共字符串 ProfessionName{get;设置;}公共字符串用户名{get;设置;} 公共 int SAP {获取;设置;}
  • 感谢您提供的额外信息。根据您在此处的 UserModel 类,该模型定义和您问题中的代码似乎存在不一致。你有一个model 变量,它应该是UserModel 类型,但是有一行有model.user1,并且在UserModel 类中没有名为“user1”的属性。你能解释一下吗?并且您将正确的属性列为组合框的 ValueMember,因此,当您执行插入语句时,您应该能够将 ProfessionValue.SelectedValue ProfessionValue 作为组合框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2015-12-22
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多