TreeView在Page_Load事件中,初始化第一二级(也就是年级,班级),我想在TreeView1_TreeNodePopulate事件中,再列出班级下面的学生。
在MSDN中帮助,把EnableClientScript="True" 和PopulateNodesFromClient="True" 设置成="True" .还是不行。
InitTree在Page_Load事件事调用。代码如下:
public void InitTree()
{
OracleDBClass.OraOracleDBClass db = new OracleDBClass.OraOracleDBClass();
string strErr = "";
DataSet ds = null;
DataView dv_nj = new DataView(); //年级
if (db.RunSQLReturnDataSet("select * from jw_t_bm_njbm", out ds, out strErr) == 1)
{
dv_nj.Table = ds.Tables[0];
foreach (DataRowView drv in dv_nj)
{
TreeNode tmpNd = new TreeNode();
tmpNd.Value = drv["njbh"].ToString();
tmpNd.Text = " " + drv["njmc"].ToString() + " ";
//RootNd.ChildNodes.Add(tmpNd);
TreeView1.Nodes.Add(tmpNd);
//为年级添加班级
OracleDBClass.OraOracleDBClass db_bj = new OracleDBClass.OraOracleDBClass();
string strErr2 = "";
DataSet ds_bj = null;
DataView dv_bj = new DataView(); //班级
if (db.RunSQLReturnDataSet("select njbh,bjbh,bjmc from jw_t_bm_bjbm where njbh='"+tmpNd.Value+"'", out ds_bj, out strErr2) == 1)
{
dv_bj.Table = ds_bj.Tables[0];
foreach (DataRowView drv_bj in dv_bj)
{
TreeNode tmpNd_bj = new TreeNode();
tmpNd_bj.Value = drv_bj["njbh"].ToString()+drv_bj["bjbh"].ToString();
tmpNd_bj.Text = "["+tmpNd_bj.Value+"] " + drv_bj["bjmc"].ToString() + " ";
//tmpNd.PopulateOnDemand = true;
tmpNd.ChildNodes.Add(tmpNd_bj);
}
}
}
}
else
{
Response.Write(strErr);
} } protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
//
if (e.Node.Depth == 1)
{
//
OracleDBClass.OraOracleDBClass db = new OracleDBClass.OraOracleDBClass();
string strErr2 = "";
DataSet ds = null;
DataView dv = new DataView();
if (db.RunSQLReturnDataSet("select xjh,name from jw_t_student where grade'" + e.Node.Value.Substring(1, 2) + "' and class='" + e.Node.Value.Substring(3, 2) + "'", out ds, out strErr2) == 1)
{
dv.Table = ds.Tables[0];
foreach (DataRowView drv in dv)
{
TreeNode tmpNd = new TreeNode();
tmpNd.Value = drv["xjh"].ToString();
tmpNd.Text = "[" + drv["name"].ToString() + "] ";
e.Node.ChildNodes.Add(tmpNd); }
} } }
在MSDN中帮助,把EnableClientScript="True" 和PopulateNodesFromClient="True" 设置成="True" .还是不行。
InitTree在Page_Load事件事调用。代码如下:
public void InitTree()
{
OracleDBClass.OraOracleDBClass db = new OracleDBClass.OraOracleDBClass();
string strErr = "";
DataSet ds = null;
DataView dv_nj = new DataView(); //年级
if (db.RunSQLReturnDataSet("select * from jw_t_bm_njbm", out ds, out strErr) == 1)
{
dv_nj.Table = ds.Tables[0];
foreach (DataRowView drv in dv_nj)
{
TreeNode tmpNd = new TreeNode();
tmpNd.Value = drv["njbh"].ToString();
tmpNd.Text = " " + drv["njmc"].ToString() + " ";
//RootNd.ChildNodes.Add(tmpNd);
TreeView1.Nodes.Add(tmpNd);
//为年级添加班级
OracleDBClass.OraOracleDBClass db_bj = new OracleDBClass.OraOracleDBClass();
string strErr2 = "";
DataSet ds_bj = null;
DataView dv_bj = new DataView(); //班级
if (db.RunSQLReturnDataSet("select njbh,bjbh,bjmc from jw_t_bm_bjbm where njbh='"+tmpNd.Value+"'", out ds_bj, out strErr2) == 1)
{
dv_bj.Table = ds_bj.Tables[0];
foreach (DataRowView drv_bj in dv_bj)
{
TreeNode tmpNd_bj = new TreeNode();
tmpNd_bj.Value = drv_bj["njbh"].ToString()+drv_bj["bjbh"].ToString();
tmpNd_bj.Text = "["+tmpNd_bj.Value+"] " + drv_bj["bjmc"].ToString() + " ";
//tmpNd.PopulateOnDemand = true;
tmpNd.ChildNodes.Add(tmpNd_bj);
}
}
}
}
else
{
Response.Write(strErr);
} } protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
//
if (e.Node.Depth == 1)
{
//
OracleDBClass.OraOracleDBClass db = new OracleDBClass.OraOracleDBClass();
string strErr2 = "";
DataSet ds = null;
DataView dv = new DataView();
if (db.RunSQLReturnDataSet("select xjh,name from jw_t_student where grade'" + e.Node.Value.Substring(1, 2) + "' and class='" + e.Node.Value.Substring(3, 2) + "'", out ds, out strErr2) == 1)
{
dv.Table = ds.Tables[0];
foreach (DataRowView drv in dv)
{
TreeNode tmpNd = new TreeNode();
tmpNd.Value = drv["xjh"].ToString();
tmpNd.Text = "[" + drv["name"].ToString() + "] ";
e.Node.ChildNodes.Add(tmpNd); }
} } }
解决方案 »
- 关于DataReader关闭与重开的问题
- 800分求救
- C#2005 Pocket2003 Socket实例化问题,艰难跪爬求解,先谢谢大仙们!
- 购物车怎样设计,比较好?
- 我的数据库密码有个&,提示有错误,应该怎么处理?请教
- 关于asp.net 中使用ajax出现 命名空间为定义的错误。
- 请教XML的问题
- 关于duwamish的配制.
- 怎样让一个DATAGRID生成的页面中的数据由一个<table>按条件分成若干个<table>中?
- (asp.net(c#)+sqlserver2000)怎么一插入记录就得到标识的自动id呢?
- fckeditor greybox 为什么在服务器上无法显示了 在线等
- 在线等:C#中WebBrowser怎样使用代理啊?
{
OracleDBClass.OraOracleDBClass db = new OracleDBClass.OraOracleDBClass();
string strErr = "";
DataSet ds = null;
DataView dv_nj = new DataView(); //年级
if (db.RunSQLReturnDataSet("select * from jw_t_bm_njbm", out ds, out strErr) == 1)
{
dv_nj.Table = ds.Tables[0];
foreach (DataRowView drv in dv_nj)
{
TreeNode tmpNd = new TreeNode();
tmpNd.PopulateOnDemand = True;
tmpNd.Value = drv["njbh"].ToString();
tmpNd.Text = " " + drv["njmc"].ToString() + " ";
//RootNd.ChildNodes.Add(tmpNd);
TreeView1.Nodes.Add(tmpNd);
//为年级添加班级
OracleDBClass.OraOracleDBClass db_bj = new OracleDBClass.OraOracleDBClass();
string strErr2 = "";
DataSet ds_bj = null;
DataView dv_bj = new DataView(); //班级
if (db.RunSQLReturnDataSet("select njbh,bjbh,bjmc from jw_t_bm_bjbm where njbh='"+tmpNd.Value+"'", out ds_bj, out strErr2) == 1)
{
dv_bj.Table = ds_bj.Tables[0];
foreach (DataRowView drv_bj in dv_bj)
{
TreeNode tmpNd_bj = new TreeNode();
tmpNd_bj.Value = drv_bj["njbh"].ToString()+drv_bj["bjbh"].ToString();
tmpNd_bj.Text = "["+tmpNd_bj.Value+"] " + drv_bj["bjmc"].ToString() + " ";
tmpNd.PopulateOnDemand = true;
tmpNd.ChildNodes.Add(tmpNd_bj);
}
}
}
}
else
{
Response.Write(strErr);
} } 设置PopulateOnDemand=True才可以动态弹出
PopulateOnDemand 在已具有子级的节点上不能设置为 true。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: PopulateOnDemand 在已具有子级的节点上不能设置为 true。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
不好意思,这个地方有些问题,PopulateOnDemand只需要要设置在你加载的最后一级接点上,public void InitTree()
{
OracleDBClass.OraOracleDBClass db = new OracleDBClass.OraOracleDBClass();
string strErr = "";
DataSet ds = null;
DataView dv_nj = new DataView(); //年级
if (db.RunSQLReturnDataSet("select * from jw_t_bm_njbm", out ds, out strErr) == 1)
{
dv_nj.Table = ds.Tables[0];
foreach (DataRowView drv in dv_nj)
{
TreeNode tmpNd = new TreeNode();
// tmpNd.PopulateOnDemand = True; tmpNd.Value = drv["njbh"].ToString();
tmpNd.Text = " " + drv["njmc"].ToString() + " ";
//RootNd.ChildNodes.Add(tmpNd);
TreeView1.Nodes.Add(tmpNd);
//为年级添加班级
OracleDBClass.OraOracleDBClass db_bj = new OracleDBClass.OraOracleDBClass();
string strErr2 = "";
DataSet ds_bj = null;
DataView dv_bj = new DataView(); //班级
if (db.RunSQLReturnDataSet("select njbh,bjbh,bjmc from jw_t_bm_bjbm where njbh='"+tmpNd.Value+"'", out ds_bj, out strErr2) == 1)
{
dv_bj.Table = ds_bj.Tables[0];
foreach (DataRowView drv_bj in dv_bj)
{
TreeNode tmpNd_bj = new TreeNode();
tmpNd_bj.Value = drv_bj["njbh"].ToString()+drv_bj["bjbh"].ToString();
tmpNd_bj.Text = "["+tmpNd_bj.Value+"] " + drv_bj["bjmc"].ToString() + " ";
tmpNd.PopulateOnDemand = true;
tmpNd.ChildNodes.Add(tmpNd_bj);
}
}
}
}
else
{
Response.Write(strErr);
} }
第一个地方的tmpNd.PopulateOnDemand = True; 确实要注释,这个是正确的。第二个地方,tmpNd.PopulateOnDemand = true; 应该改为:
tmpNd_bj.PopulateOnDemand = true;
这样就正确了。
我还发现一个问题:
String myString = "abcdef";
myString.Substring(1, 3)的值是"bcd"; //Substring方法中,字符位置的索引是从0开始
substring(myString,1,3)的值是"abc" //substring函数中,字符位置的索引是从1开始真是变态啊!!