各位帮我看看,这问题出在哪?

executemylove 2007-02-09 10:48:30
protected void bindRepeater()
{
SqlConnection conn = dataoperate.createcon();
SqlDataAdapter sda = new SqlDataAdapter("select * from CA_ClassParam order by code", conn);
DataSet ds = new DataSet();
sda.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
this.repClassParam.DataSource = ds.Tables[0].DefaultView;
this.repClassParam.DataBind();
}
for (int i = 0; i < this.repClassParam.Items.Count; i++)
{
Label bid = (Label)this.repClassParam.Items[i].FindControl("lblBigClassID");
int id=Convert.ToInt32(bid.Text);
Repeater rep = (Repeater)this.repClassParam.Items[i].FindControl("repChild");
SqlDataAdapter sda2 = new SqlDataAdapter("select * from CA_Paramebase where ClassID=" + id, conn);
DataSet ds2 = new DataSet();
sda2.Fill(ds2);
rep.DataSource = ds2;
rep.DataBind();

}
}


这是二个嵌套Repeater,这样绑定为什么出现错误???
int id=Convert.ToInt32(bid.Text);未将对象引用设置到对象的实例

我前台的父Repeater的ItemTemplate项里放了一个<asp:Label ID="lblBigClassID" Text=<%# Eval("ID") %> runat=server></asp:Label>

...全文
230 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
robertlvqing 2007-02-09
  • 打赏
  • 举报
回复
你要直接在页面查看html 看那个id的值是什么 我估计已经变了


====我有罪====


huangdong1900 2007-02-09
  • 打赏
  • 举报
回复
c#不大懂
自己可以跟踪调出来的啊应该

另外给你个小建议,别用select *
executemylove 2007-02-09
  • 打赏
  • 举报
回复
高手在哪啊???
unlimitedsaga 2007-02-09
  • 打赏
  • 举报
回复
Label bid = (Label)this.repClassParam.Items[i].FindControl("lblBigClassID");
====================================================================================
lblBigClassID应该是这个有问题,看看有没有获取到值或有没有lblBigClassID
executemylove 2007-02-09
  • 打赏
  • 举报
回复
快来人看看啊...
executemylove 2007-02-09
  • 打赏
  • 举报
回复
我也知道没有找到.可为什么呀?
ydfqing 2007-02-09
  • 打赏
  • 举报
回复
Label bid 没找到
executemylove 2007-02-09
  • 打赏
  • 举报
回复
楼上的做法不错.
我怎么没找到DataKeyField呢?
Repeater有这个吗?
ydfqing 2007-02-09
  • 打赏
  • 举报
回复
嗯,楼上的方法好,我也是经常这么用滴~~
huozg110 2007-02-09
  • 打赏
  • 举报
回复
我以前也这样写,你这样写很消耗服务器资源的。能不用For循环尽量不用。
说以下我现在的做法把。
在Page_Load绑定你的最外层的控件。(这个没问题把)
string sqlstring = "select * from 表";
this.Repeater1.DataSource=Operate.ds(sqlstring);
this.Repeater1.DataBind();
再在Repeater1_ItemCommand的事件里写上
if ( e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
{
Repeater rep = (Repeater)e.Item.FindControl( "Repeater2" );
string sqlstring = "select * from 表 where id = '"+this.Repeater 1.DataKeys[e.Item.ItemIndex]+"'";
把sqlstring 执行后返回个ds2就可以了。
rep.DataSource = ds2;
rep.DataBind();
}


记住:在Repeater1和Repeater2写上DataKeyField指定上字段(一般是主键)
ydfqing 2007-02-09
  • 打赏
  • 举报
回复
Label bid = (Label)this.repClassParam.Items[i].FindControl("lblBigClassID").Controls[0];

这样试试~~
executemylove 2007-02-09
  • 打赏
  • 举报
回复
楼上的,还是不行
hy_lihuan 2007-02-09
  • 打赏
  • 举报
回复
bid.Text = ((Label)this.repClassParam.Items[i].FindControl("lblBigClassID")).Text;

62,074

社区成员

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

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

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

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