1

我是新手,正在建立一个数据库来跟踪我的电影(用于练习)。无论如何,我使用复选框列表来输入类型(动作、喜剧、戏剧、恐怖等)。我得到了复选框列表以保存回数据库表,并且我能够获得保存的结果以预加载复选框列表但我的问题是能够取消选中并检查新类型并保存回数据库。

这是我检查 GenreCheckBox 列表中的项目并保存到 db 表中的代码。

for (int i = 0; i < GenreCheckBoxList.Items.Count; i++)
    {

        if (GenreCheckBoxList.Items[i].Selected)
        {
            cmd2.Parameters.AddWithValue("MovieID", MovieID);
            cmd2.Parameters.AddWithValue("@GenreID", GenreCheckBoxList.Items[i].Value);
            cmd2.Parameters.AddWithValue("Status", Status);
            cmd2.ExecuteNonQuery();
            cmd2.Parameters.Clear();
        }

    }

这是我显示以前保存的 GenreCheckBoxList 结果的方法

public void LoadGenreCheckBoxList()
        {
            GenreCheckBoxList.DataBind();

            string MovieID = Session["MovieID"].ToString();

            SqlConnection cnn = new SqlConnection("Data Source=STEVE-F32A48EEB;Initial Catalog=Sinema;Integrated Security=True");
            cnn.Open();
            SqlCommand cmd2 = new SqlCommand("SELECT Genre.GenreType, Genre.GenreID, GenreLine.GenreID FROM Genre INNER JOIN GenreLine ON Genre.GenreID = GenreLine.GenreID INNER JOIN Movie ON GenreLine.MovieID = Movie.MovieID WHERE GenreLine.MovieID = @MovieID AND GenreLine.Status = 1", cnn);

            cmd2.Parameters.AddWithValue("@MovieID", MovieID);
            cmd2.ExecuteScalar();


            SqlDataReader rdr2 = cmd2.ExecuteReader();
            while (rdr2.Read())
            {
                ListItem currentCheckBox = GenreCheckBoxList.Items.FindByValue(rdr2["GenreID"].ToString());

                if (currentCheckBox != null)
                {
                    currentCheckBox.Selected = true;
                }
            }


            rdr2.Close();
        }

现在我想做的是在我的编辑页面上显示结果之后,我希望能够取消选中一些检查或检查一些新的流派,而不是让已经选择的检查流派复制并保存回数据库.

我什至不知道从哪里开始。任何方向都会有很大帮助!如何编写 if 语句以满足如果genreCheckBoxList 已被检查然后不保存回数据库并且如果尚未检查则保存回数据库的条件?谢谢。

4

1 回答 1

0

我有两个选择给你。

答案 1

根据文档,您可以将复选框变成三态复选框。在加载时,您将对基于数据库选中的任何复选框执行此操作,并且您将在三种状态之间切换:“保存未选中”、“不保存任何一种方式”(即保留数据库的原样) , 和“保存检查”。其余的复选框将只有一种状态。

checkBox1.IsThreeState = true;
checkBox1.IsChecked = null;

答案 2

将每个复选框的原始状态存储在其Tag属性中。当您保存回数据库时,请检查是否(bool)checkBox1.Tag == checkBox1.IsChecked. 如果是这样,请跳过它。

于 2012-10-07T07:09:39.667 回答