C# 从自定义RadTreeNode模板读取值-适用于子树,但不适用于根树
我使用带有自定义元素模板的RadTree。每个元素还有3个单选按钮作为RadioButtonList,在自定义模板中定义。用于创建新radTree项的代码为:C# 从自定义RadTreeNode模板读取值-适用于子树,但不适用于根树,c#,asp.net,telerik,radtreeview,C#,Asp.net,Telerik,Radtreeview,我使用带有自定义元素模板的RadTree。每个元素还有3个单选按钮作为RadioButtonList,在自定义模板中定义。用于创建新radTree项的代码为: RadTreeNode node = new RadTreeNode(usedName, value); // just some name and value node.NodeTemplate = new AdminFunctionsPhenoTreeTemplate(); // makes buttons node.Expan
RadTreeNode node = new RadTreeNode(usedName, value); // just some name and value
node.NodeTemplate = new AdminFunctionsPhenoTreeTemplate(); // makes buttons
node.ExpandMode = TreeNodeExpandMode.ServerSideCallBack;
Tree.Nodes.Add(node); // adding node to RadTree.
// selections.
RadioButtonList rbRights = (RadioButtonList)node.FindControl("rbRights");
if (rbRights != null)
{
rbRights.SelectedIndex= accessLevel; // set correct radio button using rbRights.SelectedIndex
}
node.DataBind();
这段代码成功地创建了所需的节点和分配权限。SelectedIndex=accessLevel确实按照指示设置了所需的单选按钮。它适用于根树和我按需回调时创建的子树
与在服务器端回调中创建子树所用的代码完全相同——我在用户想要展开子树后使用动态创建子树。唯一形式上的区别是,它将新子树附加到父节点的Nodes属性(与示例中的RadTree“Tree”对象相反)。这都是标准的
当我收到回发时,我读取单选按钮的值,如下所示:
List<RadTreeNode> alls = (List<RadTreeNode>)Tree.GetAllNodes();
foreach (RadTreeNode node in alls)
{
RadioButtonList rbRights = (RadioButtonList)node.FindControl("rbRights");
accessLevel = rbRights.SelectedIndex; // here I read my radios
}
class AdminFunctionsPhenoTreeTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
container.Controls.Add(new LiteralControl("<table style=\"margin:0px;padding:0px;\"><tr><td>"));
Label label1 = new Label();
label1.ID = "ItemLabel";
label1.Text = "Text";
label1.Font.Size = 8;
// label1.Font.Bold = true;
label1.DataBinding += new EventHandler(label1_DataBinding);
container.Controls.Add(label1);
container.Controls.Add(new LiteralControl("</td><td>"));
RadioButtonList rbRights = new RadioButtonList();
rbRights.ID = "rbRights";
rbRights.Items.Add(new ListItem("r/o"));
rbRights.Items.Add(new ListItem("r/w"));
rbRights.Items.Add(new ListItem("r/w/meta"));
rbRights.SelectedIndex = 0;
rbRights.RepeatDirection = RepeatDirection.Horizontal;
container.Controls.Add(rbRights);
container.Controls.Add(new LiteralControl("</td></tr></table>"));
}
private void label1_DataBinding(object sender, EventArgs e)
{
Label target = (Label)sender;
RadTreeNode node = (RadTreeNode)target.BindingContainer;
string nodeText = (string)DataBinder.Eval(node, "Text");
target.Text = nodeText;
}
}
List all=(List)Tree.GetAllNodes();
foreach(ALL中的RadTreeNode节点)
{
RadioButtonList rbRights=(RadioButtonList)node.FindControl(“rbRights”);
accessLevel=rbRights.SelectedIndex;//我在这里读我的收音机
}
树的内容读取良好,子树按钮读取良好(通过回调调用创建的按钮)。但由上面的代码段创建的主根树的按钮总是返回默认值,既不是我在创建代码中插入的那个(尽管它反映在屏幕上),也不是我用鼠标选择的那个
模板的编码如下所示:
List<RadTreeNode> alls = (List<RadTreeNode>)Tree.GetAllNodes();
foreach (RadTreeNode node in alls)
{
RadioButtonList rbRights = (RadioButtonList)node.FindControl("rbRights");
accessLevel = rbRights.SelectedIndex; // here I read my radios
}
class AdminFunctionsPhenoTreeTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
container.Controls.Add(new LiteralControl("<table style=\"margin:0px;padding:0px;\"><tr><td>"));
Label label1 = new Label();
label1.ID = "ItemLabel";
label1.Text = "Text";
label1.Font.Size = 8;
// label1.Font.Bold = true;
label1.DataBinding += new EventHandler(label1_DataBinding);
container.Controls.Add(label1);
container.Controls.Add(new LiteralControl("</td><td>"));
RadioButtonList rbRights = new RadioButtonList();
rbRights.ID = "rbRights";
rbRights.Items.Add(new ListItem("r/o"));
rbRights.Items.Add(new ListItem("r/w"));
rbRights.Items.Add(new ListItem("r/w/meta"));
rbRights.SelectedIndex = 0;
rbRights.RepeatDirection = RepeatDirection.Horizontal;
container.Controls.Add(rbRights);
container.Controls.Add(new LiteralControl("</td></tr></table>"));
}
private void label1_DataBinding(object sender, EventArgs e)
{
Label target = (Label)sender;
RadTreeNode node = (RadTreeNode)target.BindingContainer;
string nodeText = (string)DataBinder.Eval(node, "Text");
target.Text = nodeText;
}
}
类AdminFunctionsPhenoTreeTemplate:ITemplate
{
公共容器(控制容器)
{
container.Controls.Add(新的LiteralControl(“”);
标签标签1=新标签();
label1.ID=“ItemLabel”;
标签1.Text=“Text”;
label1.Font.Size=8;
//label1.Font.Bold=true;
label1.DataBinding+=新事件处理程序(label1\u DataBinding);
container.Controls.Add(label1);
container.Controls.Add(新的LiteralControl(“”);
RadioButtonList rbRights=新的RadioButtonList();
rbRights.ID=“rbRights”;
rbRights.Items.Add(新列表项(“r/o”);
rbRights.Items.Add(新列表项(“r/w”);
rbRights.Items.Add(新列表项(“r/w/meta”);
rbRights.SelectedIndex=0;
rbRights.RepeatDirection=RepeatDirection.Horizontal;
container.Controls.Add(rbRights);
container.Controls.Add(新的LiteralControl(“”);
}
私有void label1_数据绑定(对象发送方,事件参数e)
{
标签目标=(标签)发送方;
RadTreeNode节点=(RadTreeNode)target.BindingContainer;
string nodeText=(string)DataBinder.Eval(node,“Text”);
target.Text=nodeText;
}
}
我想知道我错过了什么,请帮我完成这项工作 已解决:
在回发中,onLoad中发生了一个错误的Tree.DataBind()调用
这是将来自客户端的值重置为默认模板值