50分相送关于repeater嵌套

jiyongxing2006 2009-10-29 07:30:58
前台代码:<div>
<asp:Repeater ID="repeaterMain" runat="server" OnItemDataBound="rp_ItemDataBound">
<ItemTemplate><table style="width: 100px">
<tr>
<td style="width: 100px"><%#DataBinder.Eval(Container,"DataItem.Big_name")%>
</td>
</tr>
</table>
<!-- 绑定小类-->
<asp:Repeater ID ="repeaterSub" runat ="server" >
<ItemTemplate ><table style="width: 100px">
<tr>
<td style="width: 100px"><%#DataBinder.Eval(Container, "DataItem.small_name")%>
</td>
</tr>
</table></ItemTemplate></asp:Repeater>
</ItemTemplate>
</asp:Repeater>
<br />
<br />

</div>


后台代码:

public void rpbind()
{

string strSQL1 = "select Big_name from big";
SqlDataAdapter da = new SqlDataAdapter(strSQL1, cn);
DataSet ds = new DataSet();
cn.Open();
da.Fill(ds);
repeaterMain.DataSource = ds.Tables[0].DefaultView;
repeaterMain.DataBind();
cn.Close();
}
protected void rp_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rpColumnNews = (Repeater)e.Item.FindControl("repeaterSub");
//找到分类Repeater关联的数据项
DataRowView rowv = (DataRowView)e.Item.DataItem;
//提取分类ID
string strClassID = Convert.ToString(rowv["B_ID"]);
//里面的Repeater
string strSQL2 = "select small.small_name from small,big where ";
strSQL2 += " (small.B_ID=big.B_ID and big.B_ID=" + strClassID + ") or (small.B_ID=big.B_ID and big.ParentID=" + strClassID + ")";

SqlDataAdapter da2 = new SqlDataAdapter(strSQL2, cn);
ds = new DataSet();
da2.Fill(ds, "WZ");
rpColumnNews.DataSource = ds.Tables["WZ"].DefaultView;
rpColumnNews.DataBind();
cn.Close();
}

}


运行后提示
“/repeater嵌套”应用程序中的服务器错误。
--------------------------------------------------------------------------------

B_ID 既不是表 Table 的 DataColumn 也不是 DataRelation。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentException: B_ID 既不是表 Table 的 DataColumn 也不是 DataRelation。

源错误:


行 41: DataRowView rowv = (DataRowView)e.Item.DataItem;
行 42: //提取分类ID
行 43: string strClassID = Convert.ToString(rowv["B_ID"]);
行 44: //里面的Repeater
行 45: string strSQL2 = "select small.small_name from small,big where ";


高手帮忙看看哪里出错了。谢谢了,分就那么多了,全送了~~
...全文
203 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
camperer 2009-10-29
  • 打赏
  • 举报
回复
ds = new DataSet();
DataSet ds=...
jiyongxing2006 2009-10-29
  • 打赏
  • 举报
回复
各位,我把itemdatabind事件代码写成这样:


Repeater rpColumnNews = (Repeater)e.Item.FindControl("repeaterSub");
//找到分类Repeater关联的数据项
DataRowView rowv = (DataRowView)e.Item.DataItem;
//提取分类ID
string strClassID = Convert.ToString(rowv["B_ID"]);
//里面的Repeater
string strSQL2 = "select big.B_ID,small.small_name from small,big where small.B_ID=big.B_ID and big.B_ID=" + strClassID;

SqlDataAdapter da2 = new SqlDataAdapter(strSQL2, cn);
ds = new DataSet();
da2.Fill(ds);
rpColumnNews.DataSource = ds.Tables[“small"].DefaultView;
rpColumnNews.DataBind();
cn.Close();

运行后提示出错:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 64: ds = new DataSet();
行 65: da2.Fill(ds);
行 66: rpColumnNews.DataSource = ds.Tables["small"].DefaultView;
行 67: rpColumnNews.DataBind();
行 68: cn.Close();

把:da2.Fill(ds);
rpColumnNews.DataSource = ds.Tables[0].DefaultView;
修改为:da2.Fill(ds,"small");
rpColumnNews.DataSource=ds.Tables["small"].DefaultView;运行仍然是上面的错误提示。还有什么原因呢?导致这样的错误呢,实在是找不到了~~郁闷
wuyq11 2009-10-29
  • 打赏
  • 举报
回复
<tr>
<td style="width: 100px"> <%#DataBinder.Eval(Container,"DataItem.B_ID")%>
</td>
<td style="width: 100px"> <%#DataBinder.Eval(Container,"DataItem.Big_name")%>
</td>
</tr>
wuyq11 2009-10-29
  • 打赏
  • 举报
回复
select B_ID,Big_name from big
wuyq11 2009-10-29
  • 打赏
  • 举报
回复
<tr>
<td style="width: 100px"> <%#DataBinder.Eval(Container,"DataItem.B_ID")%>
</td>
</tr>
zzxap 2009-10-29
  • 打赏
  • 举报
回复
SELECT 语句,添加上B_ID字段。

SELECT B_ID......
TalesTen 2009-10-29
  • 打赏
  • 举报
回复
干嘛要这么弄??
happy664618843 2009-10-29
  • 打赏
  • 举报
回复
string sqlstr = "select top 3* from tb_EmpID select top 3a.*,b.UserID from tb_Employee as a inner join tb_EmpID as b on a.UserID=b.UserID";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds);
myds.Tables[0].TableName = "tb_EmpID";
myds.Tables[1].TableName = "tb_Employee";
DataColumn Parent = myds.Tables["tb_EmpID"].Columns["UserID"];
DataColumn Child = myds.Tables["tb_Employee"].Columns["UserID"];
DataRelation tableRelation = new DataRelation("tableRelation", Parent, Child, false);
myds.Relations.Add(tableRelation);
parentRepeater.DataSource = myds.Tables["tb_EmpID"].DefaultView;
parentRepeater.DataBind();
sqlcon.Close();




前台里加上
<asp:repeater id="childRepeater" runat="server"
DataSource='<%#((System.Data.DataRowView)Container.DataItem).CreateChildView("tableRelation") %>'>
ch46485f 2009-10-29
  • 打赏
  • 举报
回复
低手看不懂
jiangshun 2009-10-29
  • 打赏
  • 举报
回复
<asp:Repeater ID ="repeaterSub"  runat ="server" DataSource=<%#  Bind(DataBinder.Eval(Container,"B_ID"))%> >
<ItemTemplate > <table style="width: 100px">
<tr>
<td style="width: 100px"> <%#DataBinder.Eval(Container, "DataItem.small_name")%>
</td>
</tr>
</table> </ItemTemplate> </asp:Repeater>
jiangshun 2009-10-29
  • 打赏
  • 举报
回复
试试,手写的,没测试,你自己试试

//后台
public DateSet Bind(string strClassID)
{

string strSQL2 = "select small.small_name from small,big where ";
strSQL2 += " (small.B_ID=big.B_ID and big.B_ID=" + strClassID + ") or (small.B_ID=big.B_ID and big.ParentID=" + strClassID + ")";

SqlDataAdapter da2 = new SqlDataAdapter(strSQL2, cn);
ds = new DataSet();
da2.Fill(ds, "WZ");
return ds;
}


前台


<asp:Repeater ID ="repeaterSub" runat ="server" DataSource=<% Bind(DataBinder.Eval(Container,"B_ID"))%> >
<ItemTemplate > <table style="width: 100px">
<tr>
<td style="width: 100px"> <%#DataBinder.Eval(Container, "DataItem.small_name")%>
</td>
</tr>
</table> </ItemTemplate> </asp:Repeater>
小_虎 2009-10-29
  • 打赏
  • 举报
回复
单步提取sql字符串,看看能不能查出数据来?

62,182

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧