Как вытащить значение из DataGridViewComboBoxColumn? - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть комбинированное окно в сетке данных, заполняемой из таблицы DataSet, и элемент значения просто возвращает "SmashRosterID" в базу данных, которая является именем столбца. Как я могу заставить его фактически выбрать значение идентификатора?

Вот код добавляемого столбца и данные для заполняемого ComboBox:

rosterDataAdapter = new SQLiteDataAdapter(
  @"SELECT SmashRosterID,CharacterName FROM SmashRoster", cnn);

rosterNames = new DataSet();

rosterDataAdapter.Fill(rosterNames);

championTest = new DataGridViewComboBoxColumn();
championTest.Name = "ChampionTest";
championTest.DataSource = rosterNames.Tables[0];
championTest.ValueMember = "SmashRosterID"; //doesn't work
championTest.DisplayMember = "CharacterName"; //works
tournamentsGridView.Columns.Add(championTest);

А вот и обновлениеоператор, который я использую для обратной записи в базу данных:

allTournamentDataAadapter.UpdateCommand = new SQLiteCommand(
  "UPDATE SmashTournaments SET TournamentName = @TournamentName, Champion = @Champion," +
  "RunnerUp = (SELECT R2.SmashRosterID FROM SmashRoster R2 WHERE CharacterName = @RunnerUp) WHERE TournamentID = @TournamentID", cnn);

allTournamentDataAadapter.UpdateCommand.Parameters.AddWithValue(
  "@Champion", championTest.ValueMember);

allTournamentDataAadapter.Update(allTournamentData);

Остальные параметры в настоящее время работают, поэтому я пропустил их в коде, чтобы было легче увидеть, в чем заключается проблема. Это то, что записывается обратно в БД:

enter image description here

РЕДАКТИРОВАТЬ: я теперь изменил оператор параметра на:

allTournamentDataAadapter.UpdateCommand.Parameters.Add(
   "@Champion", DbType.Int64, 3, "ChampionTest");

Я изменил это на это, потому что я узнал, что мне действительно нужно вытащить CellValue, потому что у DataGridViewComboBoxColumn нет SelectedValue или чего-либо подобного, скорее, когда элемент выбирается из ComboBox, CellValue изменяется с помощью ValueMember. Тем не менее, это все еще не работает. Это просто не обновляет колонку сейчас. ValueMember может быть установлен неправильно. Не уверен.

Я экспериментировал с tournamentsGridView.CurrentRow.Cells["ChampionTest"].Value, но мне все еще не повезло. Пожалуйста, порекомендуйте.

РЕДАКТИРОВАТЬ 2: MessageBox.Show(tournamentsGridView.CurrentRow.Cells["ChampionTest"].Value.ToString()); показывает правильный идентификатор. Таким образом, значение выбирается. Просто написано не правильно, я думаю. Также MessageBox.Show(tournamentsGridView.CurrentRow.Cells["ChampionTest"].ValueType.ToString()); Показывает, что значением является Int64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...