——————在问,关于datalist的嵌套,谢谢

vvf017 2005-10-24 03:07:19
我做datalist的嵌套,外层为main_dl,内层为x_dl,想让内层的newsid根据外层的root选择显示,
可是在前台写好html后一点击回到后台就被提示<%# 值 %> 无效!
还请各位前辈帮我看看!谢谢!谢谢

前台:
<asp:datalist id=main_dl runat="server"DataSource="<%# main_DS %>">
<ItemTemplate>

<%# DataBinder.Eval(Container.DataItem,"root") %>

<asp:datalist id=x_dl runat="server"DataSource="<%# FilterData(DataBinder.Eval (Container.DataItem,"root").tostrig ()) %>">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"newsid") %>
</ItemTemplate>
</asp:datalist>

</ItemTemplate>
</asp:datalist>

后台:——————————————————————————

vb.net版

Function FilterData(ByVal v As String) As DataView
da_z.Fill(DS_z, "news") 'da_z的select已经在Page_Load中完成
Dim dv As DataView = New DataView(DS_z.Tables("news"))
dv.RowFilter = "root = " + v
x_dl.DataBind()
Return dv
End Function



c#版
DataView FilterData(string v)
{
da_z.Fill(DS_z, "news"); // DS_z的select已经在Page_Load中完成
DataView dv = new DataView(DS_z.Tables("news"));
dv.RowFilter = "Title = " + v;
x_dl.DataBind();
return dv;
}


外层main_dl的main_ds也已经在Page_Load中完成了绑定
...全文
201 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
greennetboy 2005-10-25
  • 打赏
  • 举报
回复
ds.DataSource= FilterData(DataBinder.Eval (Container.DataItem,"root").ToString())
处提示
:Container未声明
ds.DataSource= FilterData(DataBinder.Eval (Container.DataItem,"root").ToString()) 换成
ds.DataSource= FilterData(DataBinder.Eval (e.item.DataItem,"root").ToString())
vvf017 2005-10-24
  • 打赏
  • 举报
回复
自己顶!
fphuang 2005-10-24
  • 打赏
  • 举报
回复
现在手上没有编译器,你能等得急明天到单位帮你调试看看
vvf017 2005-10-24
  • 打赏
  • 举报
回复
总结一下问题:

前台:

<asp:datalist id=main_dl runat="server"DataSource="<%# main_DS %>">
<ItemTemplate>

<%# DataBinder.Eval(Container.DataItem,"root") %>

<asp:datalist id=x_dl runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"newsid") %>
</ItemTemplate>
</asp:datalist>

</ItemTemplate>
</asp:datalist>

后台:
DataView FilterData(string v)
{
da_z.Fill(DS_z, "news"); // DS_z的select已经在Page_Load中完成
DataView dv = new DataView(DS_z.Tables("news"));
dv.RowFilter = "Title = " + v;
return dv;
}


private void main_dl_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
DataList ds=(e.Item.FindControl("x_dl") as DataList)
ds.DataSource= FilterData(DataBinder.Eval (Container.DataItem,"root").ToString())
ds.DataBind();
}




出错的地方:

ds.DataSource= FilterData(DataBinder.Eval (Container.DataItem,"root").ToString())
处提示
:Container未声明



谢谢前辈们指点
vvf017 2005-10-24
  • 打赏
  • 举报
回复
前辈,能不能说详细点,实在是新手

谢谢
fphuang 2005-10-24
  • 打赏
  • 举报
回复
*.aspx文件需要引用
System.Data;
vvf017 2005-10-24
  • 打赏
  • 举报
回复
FilterData(DataBinder.Eval (Container.DataItem,"root").ToString())

处被提示出错:Container未申明

谢谢前辈,实在是新手,麻烦您啦
vvf017 2005-10-24
  • 打赏
  • 举报
回复
FilterData(DataBinder.Eval (Container.DataItem,"root").ToString())

处被提示出错:Container未申明

谢谢前辈,实在是新手,麻烦您啦
豌豆干 2005-10-24
  • 打赏
  • 举报
回复
aspx:
<asp:datalist id=x_dl runat="server">
cs:

private void main_dl_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
DataList ds=(e.Item.FindControl("x_dl") as DataList)
ds.DataSource= FilterData(DataBinder.Eval (Container.DataItem,"root").ToString())
ds.DataBind();
}
vvf017 2005-10-24
  • 打赏
  • 举报
回复
前辈,还是不能显示数据,
我是用下面这个函数给x_dl的DataSource赋值:

DataView FilterData(string v)
{
da_z.Fill(DS_z, "news"); // DS_z的select已经在Page_Load中完成
DataView dv = new DataView(DS_z.Tables("news"));
dv.RowFilter = "Title = " + v;
return dv;
}






而用这个绑定数据时,是不是因为DataSource还没被赋值,所以没能显示呢?
private void main_dl_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
DataList ds=(e.Item.FindControl("x_dl") as DataList)
ds.DataBind();
}




还是我的函数出了问题,谢谢

豌豆干 2005-10-24
  • 打赏
  • 举报
回复
你这里应该用在ItemDataBound事件中
private void main_dl_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
DataList ds=(e.Item.FindControl("x_dl") as DataList)
ds.DataBind();
}

zfhuangwei 2005-10-24
  • 打赏
  • 举报
回复

Function FilterData(ByVal v As String) As DataView

改成
Function FilterData(ByVal v As object) As DataView
豌豆干 2005-10-24
  • 打赏
  • 举报
回复
DataList ds=(main_dl.FindControl("x_dl") as DataList)
ds.DataBind();
vvf017 2005-10-24
  • 打赏
  • 举报
回复
我发现了,如果除掉 .string的话, 是内层循环的 x_dl.DataBind() 出错,提示:没有定义x_dl,
可是我在前台明明已经加入了啊!

<asp:datalist id=x_dl runat="server"DataSource='<%# FilterData(DataBinder.Eval (Container.DataItem,"root").tostrig ()) %>'>
豌豆干 2005-10-24
  • 打赏
  • 举报
回复
写错了,应该ToString()
豌豆干 2005-10-24
  • 打赏
  • 举报
回复
toString()
vvf017 2005-10-24
  • 打赏
  • 举报
回复
啊!!!!

原来如此!!!!

呵呵,谢谢前辈!

----------------------------------------------------

不过现在又有个问题,运行提示
<%# FD(DataBinder.Eval(Container.DataItem,"Title").tostrig ())%
未找到类型“String”的公共成员“tostrig”

不加.tostrig 又没能显示数据,还请前辈帮我看看是不是还有那里可能出错!

谢谢前辈
greatqn 2005-10-24
  • 打赏
  • 举报
回复
<asp:datalist id=x_dl runat="server"DataSource="<%# FilterData(DataBinder.Eval (Container.DataItem,"root").tostrig ()) %>">

提示<%# 值 %> 无效!
我知道,正在用这个。是你写错单引号和双引号了。应该这样写:


<asp:datalist id=x_dl runat="server" DataSource='<%# FilterData(DataBinder.Eval (Container.DataItem,"root").tostrig ()) %>'>

看清楚没。是单引号里面可以括双引号。

曾经也被困扰过。^^
豌豆干 2005-10-24
  • 打赏
  • 举报
回复
DataSource='<%# FilterData(DataBinder.Eval (Container.DataItem,"root").tostrig ()) %>'>

用'
vvf017 2005-10-24
  • 打赏
  • 举报
回复
自己顶起来!

62,254

社区成员

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

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

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

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