急啊,各位大哥救命!!!(TreeView中的CheckBox问题)高手救命啊!!

heilong4164 2004-11-22 11:34:40
我在TreeView中加入CheckBox,由于我需要对SelectIndexChange事件在服务器端进行处理,所以我把TreeView的Autopostback属性设为True,但同时我还要实现让用户选择几个CheckBox时不用提交页面。因为这样频繁的提交页面是用户难以忍受的。请各位仁兄看用什么方法可以实现?或者是TreeView的Autopostback属性设为False,同时可以触发TreeView的SelectIndexChange事件,从而让我可以在服务器端处理这个事件也可以。急啊,各位大哥救命!!!
...全文
146 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
goody9807 2004-11-22
  • 打赏
  • 举报
回复
function CheckedCount()
{
try
{

var mm = document.getElementsByTagName("input").length ;
for(var i=0;i<mm;i++)
{
var dd = document.getElementsByTagName("input").item(i);
if(dd.type == "checkbox")
{

if(!dd.checked)
{
dd.checked = true;
}

}
}

}
catch(e)
{
//alert(e);
}
}

morality 2004-11-22
  • 打赏
  • 举报
回复
看看如下是否对你有帮助:

<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<HTML>
<HEAD>
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
TreeView1.Attributes.Add("oncheck","tree_oncheck(this)");
}
</script>
<script language="javascript">
<!--
//初始化选中节点
function initchecknode()
{
var node=TreeView1.getTreeNode("1");
node.setAttribute("Checked","true");
setcheck(node,"true");
FindCheckedFromNode(TreeView1);
}
//oncheck事件
function tree_oncheck(tree)
{
var node=tree.getTreeNode(tree.clickedNodeIndex);
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
setcheck(node,Pchecked);
document.all.checked.value="";
document.all.unchecked.value="";
FindCheckedFromNode(TreeView1);
}
//设置子节点选中
function setcheck(node,Pc)
{
var i;
var ChildNode=new Array();
ChildNode=node.getChildren();

if(parseInt(ChildNode.length)==0)
return;
else
{
for(i=0;i<ChildNode.length;i++)
{
var cNode;
cNode=ChildNode[i];
if(parseInt(cNode.getChildren().length)!=0)
setcheck(cNode,Pc);
cNode.setAttribute("Checked",Pc);
}
}
}
//获取所有节点状态
function FindCheckedFromNode(node) {
var i = 0;
var nodes = new Array();
nodes = node.getChildren();

for (i = 0; i < nodes.length; i++) {
var cNode;
cNode=nodes[i];
if (cNode.getAttribute("Checked"))
AddChecked(cNode);
else
AddUnChecked(cNode);

if (parseInt(cNode.getChildren().length) != 0 ) {
FindCheckedFromNode(cNode);
}
}
}
//添加选中节点
function AddChecked(node) {
document.all.checked.value += node.getAttribute("NodeData");
document.all.checked.value += ',';
}
//添加未选中节点
function AddUnChecked(node) {
document.all.unchecked.value += node.getAttribute("NodeData");
document.all.unchecked.value += ',';
}
//-->
</script>
</HEAD>
<body onload="initchecknode()">
<iewc:TreeView id="TreeView1" runat="server" ExpandLevel="5">
<iewc:TreeNode NodeData="0" CheckBox="True" Text="Node0" Expanded="True">
<iewc:TreeNode NodeData="1" CheckBox="True" Text="Node1" Expanded="True"></iewc:TreeNode>
<iewc:TreeNode NodeData="2" CheckBox="True" Text="Node2" Expanded="True">
<iewc:TreeNode NodeData="3" CheckBox="True" Text="Node3" Expanded="True">
<iewc:TreeNode NodeData="4" CheckBox="True" Text="Node4"

Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="5" CheckBox="True" Text="Node5" Expanded="True">
<iewc:TreeNode NodeData="6" CheckBox="True" Text="Node6" Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
<iewc:TreeNode NodeData="7" CheckBox="True" Text="Node7" Expanded="True">
<iewc:TreeNode NodeData="8" CheckBox="True" Text="Node8" Expanded="True">
<iewc:TreeNode NodeData="9" CheckBox="True" Text="Node9"

Expanded="True"></iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeNode>
</iewc:TreeView><P>
<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="300" border="1">
<TR>
<TD>
<asp:Label id="Label1" runat="server">checked</asp:Label></TD>
<TD>
<INPUT id="checked" type="text" size="32"></TD>
</TR>
<TR>
<TD>
<asp:Label id="Label2" runat="server">unchecked</asp:Label></TD>
<TD><INPUT id="unchecked" type="text" size="32"></TD>
</TR>
</TABLE>
<br>
</P>
</body>
</HTML>

morality 2004-11-22
  • 打赏
  • 举报
回复
9.展开时不提交,改变选择节点时才提交
将autopostback设置成false;
在body里添加 <body onload="initTree()">
然后在PageLoad里写:
string strTreeName = "TreeView1";
string strRef = Page.GetPostBackEventReference(TreeView1);
string strScript = "<script language=\"JavaScript\"> \n" + "<!-- \n" + " function initTree() { \n" +" " + strTreeName + ".onSelectedIndexChange = function() { \n" + "if (event.oldTreeNodeIndex !=
event.newTreeNodeIndex) \n" + "this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex); \n" + "window.setTimeout('" + strRef.Replace("'","file://'/") + "', 0, 'JavaScript'); \n" + " } \n" + " } \n" + "// --> \n" + "</script>";
Page.RegisterClientScriptBlock("InitTree",strScript );

这样就只有你点击的节点更改的时候才提交!

Eddie005 2004-11-22
  • 打赏
  • 举报
回复
难办....
qianwt 2004-11-22
  • 打赏
  • 举报
回复
客户端的。
qianwt 2004-11-22
  • 打赏
  • 举报
回复
设置为False,然后在为TreeView写onselectedindexchange事件,然后在事件对应的方法中中提交窗体。
46539492 2004-11-22
  • 打赏
  • 举报
回复
挺难的,帮你顶一下!
heilong4164 2004-11-22
  • 打赏
  • 举报
回复
morality(业精于勤,行成于思!) 的方法我刚试过了,可以提交到服务器端,但是我在哪写自己的处理代码呢????(我要得到当前选择节点的索引号,然后查询数据库,从而得到此节点的详细信息显示到界面中)。当AutoPostBack属性设为true时它的dg_SelectIndexChange事件可以触发,但现在AutoPostBack属性为false,并不能触发此事件啊???
heilong4164 2004-11-22
  • 打赏
  • 举报
回复
谢谢各位的热心,morality(业精于勤,行成于思!) 的方法好像应该可行,可是我试过,不起作用。应该是javascript部分有错误,
window.setTimeout('" + strRef.Replace("'","file://'/") 这一句是什么意思?尤其是("'","file://'/") 这一段,可能错误出在这里,兄弟们,有谁知道啊?
learner01 2004-11-22
  • 打赏
  • 举报
回复
up!
goody9807 2004-11-22
  • 打赏
  • 举报
回复
需要对SelectIndexChange事件在服务器端进行处理

实现让用户选择几个CheckBox时不用提交页面

这2个本身就矛盾

你需要对SelectIndexChange事件在服务器端做什么事情,说说看

62,066

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧