ComboBox сначала показывает System.Data.DataRowView - PullRequest
0 голосов
/ 14 марта 2019

Так что в windowsform у меня есть 2 ComboBoxes и один CheckedListBox для упражнений. Когда вы выбираете свой тип физической подготовки (гимнастика, гири, кардио и т. Д.) И свою мышечную группу (трицепс, грудь, спину, предплечья и т. Д.), Вы должны выполнять упражнения из CheckedListBox.

Оба ComboBoxes' значения по умолчанию равны 1, поэтому в CheckedListBox должно отображаться что-то вроде отжиманий, потому что TypeFitness = 1 - это художественная гимнастика, а MuscleGroup = 1 - переднее плечо.

Вместо этого он показывает System.Data.DataRowView, но во второй раз, когда я выбираю художественную гимнастику в форме, он показывает правильную вещь. Есть ли способ сделать так, чтобы сразу показывались упражнения?

(System.Data.DataRowView показывает только когда предыдущий выбор не имел результата)

Код:

     private void TypeFitness()
    {
        string query = "SELECT FitnessId, Naam FROM TypeFitness";

        using (connection = new SqlConnection(connectionString))
        using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection))
        {
            DataTable TFdata = new DataTable();
            adapter.Fill(TFdata);

            comBoxTypeFitness.DisplayMember = "Naam";
            comBoxTypeFitness.ValueMember = "FitnessId";
            comBoxTypeFitness.DataSource = TFdata;
        }
    }

    private void MuscleGroup()
    {
        string query = "SELECT MuscleId, Naam FROM MuscleGroup";

        using (connection = new SqlConnection(connectionString))
        using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection))
        {
            DataTable MGdata = new DataTable();
            adapter.Fill(MGdata);

            comBoxMuscleGroup.DisplayMember = "Naam";
            comBoxMuscleGroup.ValueMember = "MuscleId";
            comBoxMuscleGroup.DataSource = MGdata;
        }
    }

    private void Exercises()
    {
        string query = "SELECT X.ExerciseId, X.Naam FROM Xercises AS X " +
            "INNER JOIN MG_Exercise AS MGX ON MGX.ExerciseId = X.ExerciseId " +
            "WHERE MGX.MuscleId = @MuscleId AND X.FitnessId = @FitnessId";

        using (connection = new SqlConnection(connectionString))
        using (SqlCommand command = new SqlCommand(query, connection))
        using (SqlDataAdapter adapter = new SqlDataAdapter(command))
        {
            SqlParameter param = command.Parameters.AddWithValue("@MuscleId", comBoxMuscleGroup.SelectedValue);
            SqlParameter param2 = command.Parameters.AddWithValue("@FitnessId", comBoxTypeFitness.SelectedValue);

            if(param.Value == null)
            {
                 param.Value = DBNull.Value;
            }
            if(param2.Value == null)
            {
                param2.Value = DBNull.Value;
            }

            DataTable Xdata = new DataTable();
            adapter.Fill(Xdata);

            clbXcercises.DisplayMember = "Naam";
            clbXcercises.ValueMember = "X.ExerciseId";
            clbXcercises.DataSource = Xdata;
        }
    }

1 Ответ

0 голосов
/ 14 марта 2019

Проблема была в том, что я поставил DataSource последний Exercises(). Так и должно быть:

clbXcercises.DataSource = Xdata;
clbXcercises.DisplayMember = "Naam";
clbXcercises.ValueMember = "X.ExerciseId";
...