У меня есть форма, которая позволяет пользователю добавлять игроков в список, введя имя игрока и выбрав из выпадающего списка раздел, к которому принадлежит игрок.C# ComboBox SelectedItem.toString() не возвращает ожидаемые результаты
Когда приходит время, чтобы добавить игрока в свой контроль TreeView, узел, который должен отобразить выбранное деление отображает этот текст вместо: System.Data.DataRowView
я получил код, чтобы осуществить это через MSDN здесь: https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selecteditem%28v=vs.110%29.aspx
Вот код в функции загрузки формы, чтобы заполнить поле со списком:
private void frm_add_players_Load(object sender, EventArgs e)
{
Divisions divs = new Divisions();
Players players = new Players();
DataTable dtDivisions = divs.GetActiveDivisions(); //divisions combo box
DataTable dtPlayers = players.GetPlayersByTourID(this.tourID);
//set the forms datatable
this.dt_players = dtPlayers;
//fill the combo box
this.cmbo_divisions.DataSource = dtDivisions;
this.cmbo_divisions.DisplayMember = "title";
this.cmbo_divisions.ValueMember = "ID";
this.cmbo_divisions.SelectedIndex = -1;
this.cmbo_divisions.Text = "Select a Division";
//set treeview imagelist
this.tview_roster.ImageList = tview_imagelist;
this.tview_roster.ImageIndex = 1; //division icon
//fill treeview
foreach (DataRow dr in dtPlayers.Rows)
{
FillPlayerTreeview(dr);
}
//expand treeview
this.tview_roster.ExpandAll();
this.ActiveControl = this.txt_player_name;
}
Здесь я называю функцию, чтобы добавить игрока в TreeView:
private void btn_add_Click(object sender, EventArgs e)
{
object selItem = cmbo_divisions.SelectedItem;
AddPlayerToTreeView(txt_player_name.Text, selItem.ToString());
}
А вот функция, которая добавляет игроку:
private void AddPlayerToTreeView(string playerName, string division)
{
TreeNode[] tns = this.tview_roster.Nodes.Find(division, false); //try to find the division, if exists
TreeNode tn = new TreeNode();
if (tns.Length > 0) //division exists - add player
{
tn = this.tview_roster.Nodes[tns[0].Index].Nodes.Add(playerName, playerName);
tn.ImageIndex = 0; //player icon
}
else //division doesn't exist - add division, then add player
{
tn = this.tview_roster.Nodes.Add(division, division);
tn.ImageIndex = 1; //division icon
AddPlayerToTreeView(playerName, division);
}
}
И результат:
Я не знаю, почему он не будет работать .. и я Я в недоумении. Любая помощь будет оценена по достоинству.
Адрес вашей целевой группы: Очевидно, что он не отображает данные, вызывая '.ToString()' на нем. Вы тоже не должны этого делать. – nvoigt
Я получил это решение через MSDN: https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selecteditem%28v=vs.110%29.aspx – wribit
Вы должны добавить код, где вы заполняете Combobox данными, это упростит его для нас, чтобы помочь вам. – Ian