100分请大家帮小弟我看下为什么小弟我这个for循环只能一次,是语法异常吗
100分请大家帮我看下为什么我这个for循环只能一次,是语法错误吗?
WebService shuju = new WebService();
DataTable table;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
catrory();
}
}
private void catrory()
{
string sql1 = "select catname,catid from sc_cat where fid=0 ";
table = shuju.ExcuteSelect(sql1);
StringBuilder cat = new StringBuilder();
cat.Append("<div class=\"padtb8\">");
for (int i = 0; i < table.Rows.Count; i++)
{
cat.Append("<div class=\"f fblod\" id=\"sgc" + table.Rows[i]["catid"].ToString() + "\" onclick=\"w('gc" + table.Rows[i]["catid"].ToString() + "')\">");
cat.Append("<a href=\"product_lm" + table.Rows[i]["catid"].ToString() + ".html\">");
cat.Append("" + table.Rows[i]["catname"].ToString() + "</a></div>");
cat.Append("<div class=\"ps\" id=\"gc" + table.Rows[i]["catid"].ToString() + "\" style=\"display:block\">");
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[i]["catid"].ToString() + " ");
for (int n = 0; n <table.Rows.Count; n++)
{
cat.Append("<div id=\"sfgc" + table.Rows[n]["catid"].ToString() + "\" class=\"f\" onclick=\"k('fgc" + table.Rows[n]["catid"].ToString() + "')\">");
cat.Append("" + table.Rows[n]["catname"].ToString() + "</div>");
cat.Append("<div class=\"ps\" id=\"fgc" + table.Rows[n]["catid"].ToString() + "\">");
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[n]["catid"].ToString() + " ");
if (table.Rows.Count > 0)
{
for (int m = 0; m < table.Rows.Count; m++)
{
cat.Append("<div class=\"b\">");
cat.Append("<a href=\"product_lm" + table.Rows[m]["catid"].ToString() + ".html\">");
cat.Append("" + table.Rows[m]["catname"].ToString() + "</a></div>");
}
}
cat.Append("</div>");
}
cat.Append("</div>");
}
cat.Append("</div>");
this.catr.Text = cat.ToString();
}
------解决方案--------------------
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[i]["catid"].ToString() + " ");
不要在循环内部改变循环的终止条件.
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[i]["catid"].ToString() + " ");
这条语句会改变table.count的值.
如果fid是主键的话你这样只能选出一条记录,所以只执行一次.
------解决方案--------------------
还有个问题
DataTable table; 在一个函数里面你把table 赋了3次值
有可能你第一次 table.Rows.Count == 5
第二次的时候 table.Rows.Count== 3
第三次的时候 table.Rows.Count == 1
等你在FOR 循环执行着句的时候 for (int i = 0; i < table.Rows.Count; i++)
i= 1
如果 table.rows.count也 =1 (这个table.rows.count 的值是你第三次取的值!)
那么当然只循环一次
所以这里你需要把 三次的数据保存在名称不相同的 datatable 集合内!
也不知道我说清楚没!
------解决方案--------------------
------解决方案--------------------
WebService shuju = new WebService();
DataTable table;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
catrory();
}
}
private void catrory()
{
string sql1 = "select catname,catid from sc_cat where fid=0 ";
table = shuju.ExcuteSelect(sql1);
StringBuilder cat = new StringBuilder();
cat.Append("<div class=\"padtb8\">");
for (int i = 0; i < table.Rows.Count; i++)
{
cat.Append("<div class=\"f fblod\" id=\"sgc" + table.Rows[i]["catid"].ToString() + "\" onclick=\"w('gc" + table.Rows[i]["catid"].ToString() + "')\">");
cat.Append("<a href=\"product_lm" + table.Rows[i]["catid"].ToString() + ".html\">");
cat.Append("" + table.Rows[i]["catname"].ToString() + "</a></div>");
cat.Append("<div class=\"ps\" id=\"gc" + table.Rows[i]["catid"].ToString() + "\" style=\"display:block\">");
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[i]["catid"].ToString() + " ");
for (int n = 0; n <table.Rows.Count; n++)
{
cat.Append("<div id=\"sfgc" + table.Rows[n]["catid"].ToString() + "\" class=\"f\" onclick=\"k('fgc" + table.Rows[n]["catid"].ToString() + "')\">");
cat.Append("" + table.Rows[n]["catname"].ToString() + "</div>");
cat.Append("<div class=\"ps\" id=\"fgc" + table.Rows[n]["catid"].ToString() + "\">");
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[n]["catid"].ToString() + " ");
if (table.Rows.Count > 0)
{
for (int m = 0; m < table.Rows.Count; m++)
{
cat.Append("<div class=\"b\">");
cat.Append("<a href=\"product_lm" + table.Rows[m]["catid"].ToString() + ".html\">");
cat.Append("" + table.Rows[m]["catname"].ToString() + "</a></div>");
}
}
cat.Append("</div>");
}
cat.Append("</div>");
}
cat.Append("</div>");
this.catr.Text = cat.ToString();
}
------解决方案--------------------
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[i]["catid"].ToString() + " ");
不要在循环内部改变循环的终止条件.
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[i]["catid"].ToString() + " ");
这条语句会改变table.count的值.
如果fid是主键的话你这样只能选出一条记录,所以只执行一次.
------解决方案--------------------
还有个问题
DataTable table; 在一个函数里面你把table 赋了3次值
有可能你第一次 table.Rows.Count == 5
第二次的时候 table.Rows.Count== 3
第三次的时候 table.Rows.Count == 1
等你在FOR 循环执行着句的时候 for (int i = 0; i < table.Rows.Count; i++)
i= 1
如果 table.rows.count也 =1 (这个table.rows.count 的值是你第三次取的值!)
那么当然只循环一次
所以这里你需要把 三次的数据保存在名称不相同的 datatable 集合内!
也不知道我说清楚没!
------解决方案--------------------
- C# code
private void catrory()
{
string sql1 = "select catname,catid from sc_cat where fid=0 ";
table = shuju.ExcuteSelect(sql1);
StringBuilder cat = new StringBuilder();
cat.Append(" <div class=\"padtb8\">");
for (int i = 0; i < table.Rows.Count; i++)
{
cat.Append(" <div class=\"f fblod\" id=\"sgc" + table.Rows[i]["catid"].ToString() + "\" onclick=\"w('gc" + table.Rows[i]["catid"].ToString() + "')\">");
cat.Append(" <a href=\"product_lm" + table.Rows[i]["catid"].ToString() + ".html\">");
cat.Append("" + table.Rows[i]["catname"].ToString() + " </a> </div>");
cat.Append(" <div class=\"ps\" id=\"gc" + table.Rows[i]["catid"].ToString() + "\" style=\"display:block\">");
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[i]["catid"].ToString() + " ");
for (int n = 0; n <table.Rows.Count; n++)
{
cat.Append(" <div id=\"sfgc" + table.Rows[n]["catid"].ToString() + "\" class=\"f\" onclick=\"k('fgc" + table.Rows[n]["catid"].ToString() + "')\">");
cat.Append("" + table.Rows[n]["catname"].ToString() + " </div>");
cat.Append(" <div class=\"ps\" id=\"fgc" + table.Rows[n]["catid"].ToString() + "\">");
//下面这条语句会使table.count的值改变,如果没有这记录的话,table.count的值会变为0,再一次执行循环判断时就会退出循环.
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[n]["catid"].ToString() + " ");
if (table.Rows.Count > 0)
{
for (int m = 0; m < table.Rows.Count; m++)
{
cat.Append(" <div class=\"b\">");
cat.Append(" <a href=\"product_lm" + table.Rows[m]["catid"].ToString() + ".html\">");
cat.Append("" + table.Rows[m]["catname"].ToString() + " </a> </div>");
}
}
cat.Append(" </div>");
}
cat.Append(" </div>");
}
cat.Append(" </div>");
this.catr.Text = cat.ToString();
}
------解决方案--------------------
- C# code
table = shuju.ExcuteSelect("select catname,catid from sc_cat where fid=" + table.Rows[i]["catid"].ToString() + " ");