我有一个允许用户将玩家添加到名单中的表单,输入玩家名称并从组合框中选择玩家所属的分区。
当要将播放器添加到我的TreeView控件时,应显示所选分区的节点将显示此文本:System.Data.DataRowView
我在这里通过MSDN获得了实现此代码的代码:encode
这是表单加载函数中的代码,用于填充组合框:
private void btn_add_Click(object sender, EventArgs e)
{
object selItem = cmbo_divisions.SelectedItem;
AddPlayerToTreeView(txt_player_name.Text, selItem.ToString());
}
这里我调用函数将播放器添加到TreeView:
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);
}
}
这是添加播放器的功能:
{{1}}
结果如下:
我不确定为什么它不会起作用..而且我很茫然。任何帮助将不胜感激。
答案 0 :(得分:1)
嗯,好吧......也许就像下面这样。
访问组合数据源(DataTable),并使用所选索引提取选定的行和列值。也许添加一些错误处理。
private void btn_add_Click(object sender, EventArgs e)
{
var data = cmbo_divisions.DataSource as DataTable;
var row = data.Rows[cmbo_divisions.SelectedIndex];
var selected = row["title"].ToString();
AddPlayerToTreeView(txt_player_name.Text, selected);
}
答案 1 :(得分:0)
尝试:
private void btn_add_Click(object sender, EventArgs e)
{
AddPlayerToTreeView(txt_player_name.Text, cmbo_divisions.Items[cmbo_divisions.SelectedIndex].Text);
}
编辑:更新为更好的方式
答案 2 :(得分:0)
试试这个:
private void btn_add_Click(object sender, EventArgs e)
{
object selItem = cmbo_divisions.SelectedItem;
AddPlayerToTreeView(txt_player_name.Text, cmbo_divisions.SelectedItem as string);
}
ToString()将获取类型名称,但在这种情况下,SelectedItem是一个字符串。