I changed the code for the TreeView Adapter in order to perform an optional autopostback when a checkbox is clicked.
private void WriteNodeCheckbox(TreeView treeView, TreeNode item, HtmlTextWriter writer)
{
// Added inline div to style both input and label controls on mouse over
// The original TreeView renders <TD> tags as containers and applies the class to them,
// so this is the best way I found to replicate that behavoiur
writer.WriteBeginTag("span");
// Added OnHover Method call
WriteNodeHoverBehaviour(writer);
writer.Write(HtmlTextWriter.TagRightChar);
writer.WriteBeginTag("input");
writer.WriteAttribute("type", "checkbox");
writer.WriteAttribute("id", treeView.ClientID + "n" + _checkboxIndex.ToString() + "CheckBox");
writer.WriteAttribute("name", treeView.UniqueID + "n" + _checkboxIndex.ToString() + "CheckBox");
if (!String.IsNullOrEmpty(treeView.Attributes["OnClientClickedCheckbox"]))
{
//Added functionality to add an AutoPostBack when the checkbox is clicked
//New code ->>
string postbackJava = "";
if (treeView.Attributes["CheckBoxAutoPostBack"] == "True")
{
const string codePrefix = "c";
postbackJava = Page.ClientScript.GetPostBackClientHyperlink(treeView,
codePrefix +
(Page.Server.HtmlEncode(item.ValuePath)).Replace("/", "\\"), true);
}
writer.WriteAttribute("onclick", treeView.Attributes["OnClientClickedCheckbox"] + "; " + postbackJava);
//End of new code
//Disabled code ->>
//writer.WriteAttribute("onclick", treeView.Attributes["OnClientClickedCheckbox"]);
//End <<-
}
if (item.Checked)
{
writer.WriteAttribute("checked", "checked");
}
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
//Added functionality to add image to checkbox node
//New code ->>
WriteNodeImage(treeView, item, writer);
//End <<-
if (!String.IsNullOrEmpty(item.Text))
{
writer.WriteLine();
writer.WriteBeginTag("label");
writer.WriteAttribute("for", treeView.ClientID + "n" + _checkboxIndex.ToString() + "CheckBox");
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(item.Text);
writer.WriteEndTag("label");
}
_checkboxIndex++;
// Close Span
writer.WriteEndTag("span");
//
}
With this you just add the boolean attribute CheckBoxAutoPostBack to control declaration:
gjsduarte
Member
20 Points
6 Posts
Added CheckBoxAutoPostBack To TreeView Component
Nov 18, 2009 11:00 AM|LINK
Hi,
I changed the code for the TreeView Adapter in order to perform an optional autopostback when a checkbox is clicked.
private void WriteNodeCheckbox(TreeView treeView, TreeNode item, HtmlTextWriter writer) { // Added inline div to style both input and label controls on mouse over // The original TreeView renders <TD> tags as containers and applies the class to them, // so this is the best way I found to replicate that behavoiur writer.WriteBeginTag("span"); // Added OnHover Method call WriteNodeHoverBehaviour(writer); writer.Write(HtmlTextWriter.TagRightChar); writer.WriteBeginTag("input"); writer.WriteAttribute("type", "checkbox"); writer.WriteAttribute("id", treeView.ClientID + "n" + _checkboxIndex.ToString() + "CheckBox"); writer.WriteAttribute("name", treeView.UniqueID + "n" + _checkboxIndex.ToString() + "CheckBox"); if (!String.IsNullOrEmpty(treeView.Attributes["OnClientClickedCheckbox"])) { //Added functionality to add an AutoPostBack when the checkbox is clicked //New code ->> string postbackJava = ""; if (treeView.Attributes["CheckBoxAutoPostBack"] == "True") { const string codePrefix = "c"; postbackJava = Page.ClientScript.GetPostBackClientHyperlink(treeView, codePrefix + (Page.Server.HtmlEncode(item.ValuePath)).Replace("/", "\\"), true); } writer.WriteAttribute("onclick", treeView.Attributes["OnClientClickedCheckbox"] + "; " + postbackJava); //End of new code //Disabled code ->> //writer.WriteAttribute("onclick", treeView.Attributes["OnClientClickedCheckbox"]); //End <<- } if (item.Checked) { writer.WriteAttribute("checked", "checked"); } writer.Write(HtmlTextWriter.SelfClosingTagEnd); //Added functionality to add image to checkbox node //New code ->> WriteNodeImage(treeView, item, writer); //End <<- if (!String.IsNullOrEmpty(item.Text)) { writer.WriteLine(); writer.WriteBeginTag("label"); writer.WriteAttribute("for", treeView.ClientID + "n" + _checkboxIndex.ToString() + "CheckBox"); writer.Write(HtmlTextWriter.TagRightChar); writer.Write(item.Text); writer.WriteEndTag("label"); } _checkboxIndex++; // Close Span writer.WriteEndTag("span"); // }With this you just add the boolean attribute CheckBoxAutoPostBack to control declaration:
<asp:TreeView ID="MyTreeView" runat="server" OnClientClickedCheckbox="CascadeCheckmarks(event)" OnTreeNodeCheckChanged="OnCheckChanged" OnAdaptedTreeNodeCheckChanged="OnCheckChanged" CssSelectorClass="SimpleEntertainmentTreeView" CheckBoxAutoPostBack="True" ShowCheckBoxes="All"> </asp:TreeView>Treeview checkbox AutoPostBack
Systems Administrator & .NET Developer