我有一个用户表,用户表中有一个Brand品牌的字段,每个用户可以对这个品牌进行维护操作,品牌可以为多个以逗号进行隔开。
品牌太多不利于进行维护,在保存的时候需要进行大量的验证,代码量太多。一个品牌就是一个单选框那多个品牌就是多个单选框这样维护起来太复杂了。
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;
}
这样做代码量太大,不利于维护
想要通过循环或者其他方式实现
每个用户可以维护多个品牌,代码从简不要量太大。
一种实现方案是使用第三方数据结构(如数据库)来存储每个用户对应的品牌。例如,可以创建一个关系表,该表用两个列存储用户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
}
这样的方式更加简洁易于维护,也更灵活,更适合更多的品牌。
也可以可以尝试使用存储过程,将多个品牌以逗号分隔的字符串转换为多个数据库字段,这样在数据库中可以进行高效的查询和维护。也可以考虑使用中间表来维护多对多的关系,从而减少数据库的访问和操作的复杂度。