自在猫先生 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 java corba的客户端该如何指定使用本地某个固定IP去连接服务端?
  • ¥15 有人写过RPA后台管理系统么?
  • ¥15 Bioage计算生物学年龄
  • ¥20 如何将FPGA Alveo U50恢复原来出厂设置哇?
  • ¥50 cocos2d-x lua 在mac上接入lua protobuf?
  • ¥15 es 7.17.20版本生成时间戳
  • ¥15 wpf dategrid表头排序图标自定义
  • ¥15 xshell无法连接提示ssh服务器拒绝密码
  • ¥15 AT89C52单片机C语言关于串口通信的位操作
  • ¥20 需要步骤截图(标签-服务器|关键词-map)