自在猫先生 2023-01-31 10:19 采纳率: 62.9%
浏览 35
已结题

c#实现每个用户可以对多个品牌进行维护怎么做最快捷代码少方便

问题遇到的现象和发生背景

我有一个用户表,用户表中有一个Brand品牌的字段,每个用户可以对这个品牌进行维护操作,品牌可以为多个以逗号进行隔开。

遇到的现象和发生背景,请写出第一个错误信息

品牌太多不利于进行维护,在保存的时候需要进行大量的验证,代码量太多。一个品牌就是一个单选框那多个品牌就是多个单选框这样维护起来太复杂了。

img

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
if (!cebNissan.Checked && !cebLanTu.Checked)
                {
                    dr["Brand"] = TxtBrand.Text.Trim();
                }
                if (cebNissan.Checked && cebLanTu.Checked)
                {
                    dr["Brand"] = this.cebNissan.Text + "," + this.cebLanTu.Text;
                }
                if (cebNissan.Checked&&!cebLanTu.Checked)
                {
                    dr["Brand"] = this.cebNissan.Text;
                }
                if (cebLanTu.Checked && !cebNissan.Checked)
                {
                    dr["Brand"] = this.cebLanTu.Text;
                }
/存在多个品牌的进行数据分割
                    if (drv["Brand"].ToString().Contains(","))
                    {
                        Nissan = drv["Brand"].ToString();
                        cebNissan.Text = Nissan.Substring(0, Nissan.IndexOf(","));
                        cebNissan.Checked = true;
                        LanTu = drv["Brand"].ToString();
                        string[] numbers = LanTu.Split(',');
                        cebLanTu.Text = numbers[1];
                        cebLanTu.Checked = true;
                    }
运行结果及详细报错内容

这样做代码量太大,不利于维护

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

想要通过循环或者其他方式实现

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

每个用户可以维护多个品牌,代码从简不要量太大。

  • 写回答

1条回答 默认 最新

  • m0_54204465 2023-01-31 11:05
    关注

    一种实现方案是使用第三方数据结构(如数据库)来存储每个用户对应的品牌。例如,可以创建一个关系表,该表用两个列存储用户ID和品牌ID。这样,每个用户可以对多个品牌进行维护,而不需要在单个字段中存储多个品牌信息。

    例如:

    用户表(User):
    UserID | UserName | ValidUntil | Remarks

    品牌表(Brand):
    BrandID | BrandName

    用户-品牌关系表(UserBrand):
    UserID | BrandID

    可以使用以下代码实现:

    // Add user-brand relationship
    int userID = 1;
    int brandID = 2;
    string sql = "INSERT INTO UserBrand (UserID, BrandID) VALUES (@UserID, @BrandID)";
    using (SqlCommand cmd = new SqlCommand(sql, connection))
    {
    cmd.Parameters.AddWithValue("@UserID", userID);
    cmd.Parameters.AddWithValue("@BrandID", brandID);
    cmd.ExecuteNonQuery();
    }
    
    // Remove user-brand relationship
    userID = 1;
    brandID = 2;
    sql = "DELETE FROM UserBrand WHERE UserID = @UserID AND BrandID = @BrandID";
    using (SqlCommand cmd = new SqlCommand(sql, connection))
    {
    cmd.Parameters.AddWithValue("@UserID", userID);
    cmd.Parameters.AddWithValue("@BrandID", brandID);
    cmd.ExecuteNonQuery();
    }
    
    

    也可以使用一个存储用户品牌的集合,如List,在用户点击品牌复选框时,将品牌添加到集合中,同时也可以从集合中删除。这样,您就可以使用一个循环遍历集合中的所有品牌,而不是每个品牌都需要一个单独的if语句。

    List<string> brandList = new List<string>();
    
    private void Checkbox_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox checkBox = sender as CheckBox;
        if (checkBox.Checked)
        {
            brandList.Add(checkBox.Text);
        }
        else
        {
            brandList.Remove(checkBox.Text);
        }
    }
    
    private void SaveUser_Click(object sender, EventArgs e)
    {
        string brand = string.Join(",", brandList);
        // Save user with brand field set to brand string
    }
    
    

    这样的方式更加简洁易于维护,也更灵活,更适合更多的品牌。
    也可以可以尝试使用存储过程,将多个品牌以逗号分隔的字符串转换为多个数据库字段,这样在数据库中可以进行高效的查询和维护。也可以考虑使用中间表来维护多对多的关系,从而减少数据库的访问和操作的复杂度。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 修改了问题 1月31日
  • 创建了问题 1月31日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: