我在datagridview中有一个组合框,该组合框是从DataSet表中填充的,而值成员只是将“ SmashRosterID”返回到作为列名的数据库。如何获得它以实际选择ID值?
这是要添加的列的代码和要填充的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);
其余参数目前都在工作,因此我从代码中省略了它们,以便更轻松地了解问题所在。这是写回数据库的内容:
编辑:我现在将参数语句更改为:
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());
确实显示正确的ID。因此正在选择该值。我认为只是写得不好。另外,MessageBox.Show(tournamentsGridView.CurrentRow.Cells["ChampionTest"].ValueType.ToString());
表示该值为Int64。