你是不是只在第一次请求页面时,给 arrlistTypeName赋了值,以后就没有赋值给它了?
我记得静态变量好象不能保存到第二次请求。用session或者application吧
我记得静态变量好象不能保存到第二次请求。用session或者application吧
解决方案 »
- Gridview表头中添加checkbox,可以全选列中的checkbox,同时列中要有checkbox和textbox,我我我我要崩溃了
- B2C网站支付问题
- 像CSDN中的relation tag 的算法是如何实现的呀?
- 谁有递归写树的实例
- 如何在DataTable.select里面使能通配符?
- 100分请教一个过程引用的问题
- 有关DROPDOWNLIST联动问题求教?
- 如何找出相同的地址。。
- 大家开发是,都是在web server上调试的吗?怎么搭建啊?
- 不同的 asp.net 项目,如何共享数据?
- 我想使用asp.net的form验证,大家帮忙~
- 简单问题-这个web.config文件错在哪里?
<%@ Register TagPrefix="IE" Namespace="Microsoft.Web.UI.WebControls"
Assembly="Microsoft.Web.UI.WebControls" %>
<Script language="C#" runat="server">
static DataSet dsArticleType;
//是否包含CheckBox
static string strCB;
//是否包含在IFrame中
static string strIsIFrame;
//父窗口得到值的隐藏域
static string strParentHidden;
static string strNames="";
static int intTempLen=0;
//使用数组保存栏目层级
static ArrayList arrlistTypeName;
private void Page_Load(object sender, System.EventArgs e)
{
//arrlistTypeName.Clear();
// TreeView1.Attributes.Add("onselectedindexchange","return TreeView1_AfterCheck()");
strCB=Request.Params["cb"];
if(strCB != null && strCB != "")
{
strCB = strCB.Trim();
}
else
{
strCB = "";
}
strIsIFrame=Request.Params["IsIFrame"];
if(strIsIFrame != null && strIsIFrame != "")
{
strIsIFrame = strIsIFrame.Trim().ToLower();
}
else
{
strIsIFrame = "";
} strParentHidden = Request.Params["ParentHidden"];
if(strParentHidden != null && strParentHidden != "")
{
strParentHidden = strParentHidden.Trim();
}
else
{
strParentHidden = "";
} if(!IsPostBack)
{
// arrlistTypeName=new ArrayList();
try
{
//初始化连接字符串
dsArticleType = new DataSet();
string strTable="ArticleType";
string strSQL="Select * from ArticleType Order by OrderID";
dsArticleType=CreateDataSet(strSQL,strConnString,strTable);
}
catch (Exception ex)
{
// Session["Error"] = ex.ToString();
// Response.Redirect("error.aspx"); //跳转程序的公共错误处理页面
}
finally
{
}
//调用递归函数,完成树形结构的生成
AddTree("0",(TreeNode)null);
} string strBodyBgColor=Request.Params["BodyBgColor"];
string strExpandLevel=Request.Params["ExpandLevel"];
if(strBodyBgColor !=null && strBodyBgColor != "")
{
TreeViewBody.Attributes.Add("bgColor","#" + strBodyBgColor);
TreeView1.Attributes.Add("DefaultStyle","color:#336699;font-size:13px");
// TreeView1.Attributes.Add("DefaultStyle","background:#FF0000;border:solid 0px; color:yellow;font-size:8pt");
// TreeView1.Attributes.Add("HoverStyle","color:yellow;font-name:Arial");
// TreeView1.Attributes.Add("SelectedStyle","color:white;font-name:Arial;font-weight:bold-italic");
}
if(strExpandLevel !=null && strExpandLevel != "")
{
strExpandLevel=strExpandLevel.Trim();
try
{
TreeView1.ExpandLevel=Convert.ToInt32(strExpandLevel);
}
catch(Exception ex)
{
TreeView1.ExpandLevel= 8;
}
}
// TreeView1.ExpandAll();
//arrlistTypeName.Clear();
//arrlistTypeName=null;
}// 递归添加树的节点
public void AddTree(string ParentID,TreeNode pNode)
{
DataView dvTree = new DataView(dsArticleType.Tables["ArticleType"]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[ParentId] = '" + ParentID + "'";
int intTemp;
foreach(DataRowView Row in dvTree)
{
TreeNode Node=new TreeNode() ;
if(pNode == null)
{ //'?添加根节点
Node.Text = Row["TypeName"].ToString();
Node.ID="0" + " | " + Row["ArticleTypeID"].ToString();
// Node.CheckBox = true;
TreeView1.Nodes.Add(Node);
arrlistTypeName=new ArrayList();
AddTree(Row["ArticleTypeID"].ToString(), Node); //再次递归
}
else
{ //添加当前节点的子节点
Node.Text = Row["TypeName"].ToString();
if(strCB == "true")
{
Node.CheckBox = true;
}
Node.ID=Row["TypeId"].ToString()+ " | " + Row["ArticleTypeID"].ToString(); if(Row["TypeID"].ToString().Length-intTempLen==2)
{
intTempLen=Row["TypeID"].ToString().Length;
arrlistTypeName.Add(Row["TypeName"].ToString());
}
else if(Row["TypeID"].ToString().Length-intTempLen== 0)
{
intTempLen=Row["TypeID"].ToString().Length;
arrlistTypeName.RemoveAt(arrlistTypeName.Count-1);
arrlistTypeName.Add(Row["TypeName"].ToString());
}
else if(Row["TypeID"].ToString().Length-intTempLen<0)
{
intTemp=intTempLen-Row["TypeID"].ToString().Length;
int k;
for(k=0;k<intTemp;k+=2)
{
arrlistTypeName.RemoveAt(arrlistTypeName.Count-1-k);
} arrlistTypeName.RemoveAt(arrlistTypeName.Count-1);
arrlistTypeName.Add(Row["TypeName"].ToString());
intTempLen=Row["TypeID"].ToString().Length;
}
int j;
for(j=0;j<arrlistTypeName.Count;j++)
{
Node.ID += "-" + arrlistTypeName[j];
} pNode.Nodes.Add(Node);
AddTree(Row["ArticleTypeID"].ToString(),Node); //再次递归
}
}
} private void TreeView1_SelectedIndexChange(Object sender,TreeViewSelectEventArgs e)
{
TreeNode newNode = TreeView1.GetNodeFromIndex(e.NewNode);
string strTmp;
string strOutScript;
string strOutTypeID;
string strOutTypeScription="";
string[]arrTmp;
int m;
if(strIsIFrame=="true" && strParentHidden == "singleTypeID")
{
strTmp= newNode.Text + " ID=" + newNode.ID;
// 要闻简讯 ID=10111210 | 15-即时新闻-国内新闻-国内要闻-要闻简讯
arrTmp=strTmp.Split('-');
strOutTypeID=arrTmp[0];
for(m=1;m<arrTmp.Length;m++)
{
strOutTypeScription += "-" + arrTmp[m].ToString();
}
strOutScript=@"
<Script language='JavaScript'>
parent.document.all['singleTypeID'].value='"
+ strOutTypeID + "';"
+ @"parent.document.all['Add_ArticleTypeScription'].value='"
+ strOutTypeScription + "';"
+ @"
</S cript>
";
Response.Write(strOutScript.Replace("/S cript",@"/Script"));
} newNode.Checked=true;
CheckNodes(newNode);
expand(newNode);
}
private void TreeView1_onCheck(object sender,TreeViewClickEventArgs e)
{
TreeNode newNode = TreeView1.GetNodeFromIndex(e.Node);
//如果是选择单个TypeID,父窗口的隐含域为singleTypeID,则:
CheckNodes(newNode);
expand(newNode);
}private void CheckNodes(TreeNode pNode)
{
foreach(TreeNode node in pNode.Nodes)
{
node.Checked = pNode.Checked;
if(node.Nodes.Count > 0)
{
CheckNodes(node);
}
}
CheckParentNodes(pNode);
}//如果子节点任何一个或多个未被选中,则父节点不被选中
private void CheckParentNodes(TreeNode cNode)
{
if(cNode.ID.Length>2)
{
if(!cNode.Checked)
{
((TreeNode)cNode.Parent).Checked=false;
TreeNode pNode = ((TreeNode)cNode.Parent);
CheckParentNodes(pNode);
}
}
}private void expand(TreeNode node)
{
if(node.Nodes.Count>0)
{
node.Expanded=true;
foreach(TreeNode tempNode in node.Nodes)
{
expand(tempNode);
}
}
}
private void TreeView1_Expand(object sender,TreeViewClickEventArgs e)
{
}
</Script>
<Script language="JavaScript">
function TreeView1_AfterCheck()
{
//alert("可以。");
}
</Script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>新闻栏目分类</title>
<style type="text/css">
<!--
body {
margin-left: 2px;
margin-top: 2px;
}
-->
</style></head>
<body runat="server" id="TreeViewBody">
<form runat="server">
<IE:TreeView id="TreeView1" runat="server" EXPANDLEVEL=2
OnSelectedIndexChange="TreeView1_SelectedIndexChange"
AutoPostBack="true" onexpand="TreeView1_Expand"
oncheck="TreeView1_onCheck"
/>
</form>
</body>
</html>
Page_Load中:
if(!IsPostBack)
{
AddTree("0",(TreeNode)null);
}public void AddTree(string ParentID,TreeNode pNode)
{
...
int intTemp;
foreach(DataRowView Row in dvTree)
{
....
//添加当前节点的子节点
Node.Text = Row["TypeName"].ToString();
if(strCB == "true")
{
Node.CheckBox = true;
}
Node.ID=Row["TypeId"].ToString()+ " | " + Row["ArticleTypeID"].ToString(); if(Row["TypeID"].ToString().Length-intTempLen==2)
{
intTempLen=Row["TypeID"].ToString().Length;
arrlistTypeName.Add(Row["TypeName"].ToString());
}
else if(Row["TypeID"].ToString().Length-intTempLen== 0)
{
intTempLen=Row["TypeID"].ToString().Length;
arrlistTypeName.RemoveAt(arrlistTypeName.Count-1);
arrlistTypeName.Add(Row["TypeName"].ToString());
}
else if(Row["TypeID"].ToString().Length-intTempLen<0)
{
intTemp=intTempLen-Row["TypeID"].ToString().Length;
int k;
for(k=0;k<intTemp;k+=2)
{
//刷新时报下句错误:索引超出范围。必须为非负值并小于集合大小。参数名:index
arrlistTypeName.RemoveAt(arrlistTypeName.Count-1-k);
} arrlistTypeName.RemoveAt(arrlistTypeName.Count-1);
arrlistTypeName.Add(Row["TypeName"].ToString());
intTempLen=Row["TypeID"].ToString().Length;
}
...
pNode.Nodes.Add(Node);
AddTree(Row["ArticleTypeID"].ToString(),Node); //再次递归
}
}
arrlistTypeName.Add(Row["TypeName"].ToString());
在你刷新时有没有执行。
在执行RemoveAt前先看一下它的count为多少?
然后在Remove前先判断一下它的count值,如果小于当胆要移除的项index值则不做移除操作
intTempLen=0;即可。谢谢 xupc(寻巢鸟)。