标题:Repeater嵌套二级显示不正常(附图说明)描述:大类的myNoBigClassName这一部分显示是正常的小类的myNoSmallClassName我是参照大类的思路来做的,但是在显示的时候,总是不正常具体效果如下:HTML Code<!--大类循环显示开始-->
<% if(myNoBigClassName != ""){ %>
<tr>
<td height="30" colspan="3"><%= myNoBigClassName %></td>
</tr>
<% } %>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td height="30">大类</td>
</tr>
<!--小类循环显示开坮-->
<% if(myNoSmallClassName != ""){ %>
<tr>
<td height="30" colspan="3"><%= myNoBigClassName %></td>
</tr>
<% } %> <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'>
<ItemTemplate>
<tr>
<td height="30">小类</td>
</tr>
</ItemTemplate>
</asp:Repeater>
<!--小类循环显示结束-->
</ItemTemplate>
</asp:Repeater>
<!--大类循环显示结束-->
C# Codepublic partial class InfomationClassManage : MacBase
{
protected string myNoBigClassName = null;
protected string myNoSmallClassName = null; protected void Page_Load(object sender, EventArgs e)
{
// 数据库链接
SqlConnection myConnection = new SqlConnection(strConnection);
myConnection.Open(); // 数据库查询
string mySql = "select * from Mac_InfomationBigClass";
SqlDataAdapter myAdapter = new SqlDataAdapter(mySql,myConnection); // 查询结果填充到DataSet数据集
DataSet mySet = new DataSet();
myAdapter.Fill(mySet); // 用DataSet数据集绑定控件
Repeater1.DataSource = mySet;
Repeater1.DataBind();
myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : "";
myConnection.Close();
} protected DataTable BindSub(int nBigClassID)
{
// 数据库链接
SqlConnection myConnection = new SqlConnection(strConnection);
myConnection.Open(); // 数据库查询
string mySql = "select * from Mac_InfomationSmallClass where InfomationBigClass_ID = @nBigClassID";
SqlDataAdapter myAdapter = new SqlDataAdapter(mySql,myConnection); // 查询结果填充到DataSet数据集
myAdapter.SelectCommand.Parameters.AddWithValue("nBigClassID", nBigClassID);
DataSet mySet = new DataSet();
myAdapter.Fill(mySet);
// 判断是否有记录存在
if (mySet.Tables[0].Rows.Count == 0)
{
myNoSmallClassName = "提示:你还没有添加任何信息小类!";
}
myConnection.Close();
return mySet.Tables[0];
}
}
<% if(myNoBigClassName != ""){ %>
<tr>
<td height="30" colspan="3"><%= myNoBigClassName %></td>
</tr>
<% } %>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td height="30">大类</td>
</tr>
<!--小类循环显示开坮-->
<% if(myNoSmallClassName != ""){ %>
<tr>
<td height="30" colspan="3"><%= myNoBigClassName %></td>
</tr>
<% } %> <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'>
<ItemTemplate>
<tr>
<td height="30">小类</td>
</tr>
</ItemTemplate>
</asp:Repeater>
<!--小类循环显示结束-->
</ItemTemplate>
</asp:Repeater>
<!--大类循环显示结束-->
C# Codepublic partial class InfomationClassManage : MacBase
{
protected string myNoBigClassName = null;
protected string myNoSmallClassName = null; protected void Page_Load(object sender, EventArgs e)
{
// 数据库链接
SqlConnection myConnection = new SqlConnection(strConnection);
myConnection.Open(); // 数据库查询
string mySql = "select * from Mac_InfomationBigClass";
SqlDataAdapter myAdapter = new SqlDataAdapter(mySql,myConnection); // 查询结果填充到DataSet数据集
DataSet mySet = new DataSet();
myAdapter.Fill(mySet); // 用DataSet数据集绑定控件
Repeater1.DataSource = mySet;
Repeater1.DataBind();
myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : "";
myConnection.Close();
} protected DataTable BindSub(int nBigClassID)
{
// 数据库链接
SqlConnection myConnection = new SqlConnection(strConnection);
myConnection.Open(); // 数据库查询
string mySql = "select * from Mac_InfomationSmallClass where InfomationBigClass_ID = @nBigClassID";
SqlDataAdapter myAdapter = new SqlDataAdapter(mySql,myConnection); // 查询结果填充到DataSet数据集
myAdapter.SelectCommand.Parameters.AddWithValue("nBigClassID", nBigClassID);
DataSet mySet = new DataSet();
myAdapter.Fill(mySet);
// 判断是否有记录存在
if (mySet.Tables[0].Rows.Count == 0)
{
myNoSmallClassName = "提示:你还没有添加任何信息小类!";
}
myConnection.Close();
return mySet.Tables[0];
}
}
if (mySet.Tables[0].Rows.Count == 0)
{
myNoSmallClassName = "提示:你还没有添加任何信息小类!";
}
myConnection.Close();
return mySet.Tables[0]; 问题应该在 if (mySet.Tables[0].Rows.Count == 0)
这个判断上~ 此时mySet应该有两个表,第一个表是大类的,第二个表是小类。这里要写数字的话,应该是1不过不推荐用数字,在myAdapter.Fill 时可以指定表名的(你看下就知道了)然后通过表名来查找
<% if(myNoSmallClassName != ""){ %>
<tr>
<td height="30" colspan="3"> <%= myNoBigClassName %> </td>
</tr>
<% } %> <asp:Repeater ID="Repeater2" runat="server" DataSource=' <%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'>
<ItemTemplate>
<tr>
<td height="30">小类 </td>
</tr>
</ItemTemplate>
</asp:Repeater>
<!--小类循环显示结束-->
</ItemTemplate>
</asp:Repeater>
你把这两个位置换一下,告诉我什么效果
恩,应该屏弃<% %> 这种asp 时代的写法
protected string myNoBigClassName = null;
protected string myNoSmallClassName = null; 换成 protected string myNoBigClassName = "";
protected string myNoSmallClassName = "";
or protected string myNoBigClassName = string.Empty;
protected string myNoSmallClassName = string.Empty;
要不有可能出现空指针异常把<% if(myNoSmallClassName != ""){ %>
<tr>
<td height="30" colspan="3"> <%= myNoBigClassName %> </td>
</tr>
<% } %>
myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : "";
换成
<%= string.IsNullOrEmpty(myNoBigClassName)?"":"<tr><td height="30" colspan="3">"+myNoBigClassName+"</td></tr>"%>myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : "";
<% if(myNoSmallClassName != ""){ %>
<tr>
<td height="30" colspan="3"> <%= myNoBigClassName %> </td>
</tr>
<% } %> <asp:Repeater ID="Repeater2" runat="server" DataSource=' <%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'>
<ItemTemplate>
<tr>
<td height="30">小类 </td>
</tr>
</ItemTemplate>
</asp:Repeater> 换成 <asp:Repeater ID="Repeater2" runat="server" DataSource=' <%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'>
<ItemTemplate>
<tr>
<td height="30">小类 </td>
</tr>
</ItemTemplate>
</asp:Repeater>
<%# ((Repeater)Container.FindControl("rp")).Items.Count==0?"<tr><td height='30' colspan='3'>提示:你还没有添加任何信息小类!</td></tr>":""%>这样试试把我在12楼的代码 html属性的"换成' 要不出错了。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 数据库链接
SqlConnection myConnection = new SqlConnection(strConnection);
myConnection.Open(); // 数据库查询
string mySql = "select * from Mac_InfomationBigClass";
SqlDataAdapter myAdapter = new SqlDataAdapter(mySql, myConnection); // 查询结果填充到DataSet数据集
DataSet mySet = new DataSet();
myAdapter.Fill(mySet); // 用DataSet数据集绑定控件
Repeater1.DataSource = mySet;
Repeater1.DataBind();
myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : ""; myConnection.Close();
}
}