简单的全局变量问题、显示上次查询数据……
页面想实现的功能是,通过读取的ID,获取父级目录名称。可以是无限级的。
代码为:
public string FindCat_str = null;
public string Sql = null;
public string RoleName = null;
public int RoleThreadID = 0;
public int num = 0;
protected string ChaXunChild(object Child)
{
if (Convert.ToInt32(Child).ToString() != "0 ")
{
Sql = "SELECT Role,RoleThreadID FROM In_Role WHERE RoleID = " + Convert.ToInt32(Child) + " ";
SqlDataReader dr = a.GetDataReader(Sql);
if (dr.Read())
{
RoleName = dr[ "Role "].ToString();
RoleThreadID = Convert.ToInt32(dr[ "RoleThreadID "].ToString());
}
dr.Close();
if (FindCat_str != null)
{
FindCat_str = FindCat_str + "- " + RoleName;
}
else
{
FindCat_str = RoleName;
}
if (RoleThreadID.ToString() == "0 ")
{
return FindCat_str;
}
else
{
return ChaXunChild(RoleThreadID);
}
}
else
{
return "未指定 ";
}
}
引用代码是:
<%# ChaXunChild(DataBinder.Eval(Container.DataItem, "RoleID ")) %>
现在的问题是:
第一行读取正确:
111111111111111-技术部
第二行就出现错误
值为:111111111111111-技术部-333333333333333-技术部
而第二行的真正值为333333333333333-技术部
它将第一行的值也赋到第二行里面去了。
请大家帮忙找一下问题……
[解决办法]
改一下,在递归结束时
if (RoleThreadID.ToString() == "0 ")
{
FindCat_str = null;
Sql = null;
RoleName = null;
RoleThreadID = 0;
num = 0;
return FindCat_str;
}
else
{
return ChaXunChild(RoleThreadID);
}
[解决办法]
第二行就出现错误
值为:111111111111111-技术部-333333333333333-技术部
而第二行的真正值为333333333333333-技术部
===========
1。
因为你使用的 FindCat_str 是私有字段(这里你就当它是全局变量吧,实际上完全 OO 的C# 是不应该有 全局变量 这以说法的)
而你又进行自连接操作 FindCat_str = FindCat_str + "- " + RoleName;
肯定是不断的连接字符串了
2。
考虑使用本地(局部)变量,并用 ref 关键字 传递参数,以便可以改变参数
just try
//
protected string ChaXunChild(object Child)
{
string FindCat_str = " ";
return ChaXunChildRecursive(object Child, ref FindCat_str);
}
// 递归实现
protected string ChaXunChildRecursive(object Child, ref string FindCat_str)
{
if (Convert.ToInt32(Child).ToString() != "0 ")
{
Sql = "SELECT Role,RoleThreadID FROM In_Role WHERE RoleID = " + Convert.ToInt32(Child) + " ";
SqlDataReader dr = a.GetDataReader(Sql);
if (dr.Read())
{
RoleName = dr[ "Role "].ToString();
RoleThreadID = Convert.ToInt32(dr[ "RoleThreadID "].ToString());
}
dr.Close();
if (FindCat_str != null)
{
FindCat_str = FindCat_str + "- " + RoleName;
}
else
{
FindCat_str = RoleName;
}
if (RoleThreadID.ToString() == "0 ")
{
return FindCat_str;
}
else
{
ChaXunChildRecursive(RoleThreadID, ref FindCat_str);
//return ChaXunChild(RoleThreadID);
}
}
else
{
FindCat_str = "未指定 ";
//return "未指定 ";
}
}
Hope helpful.