请问:在Repeater的OnItemCommand事件中如何获取对应的那行记录的值?
在<ItemTemplate>中有一个linkbutton,<asp:LinkButton Runat="server" CommandName="downs" ><%#((PostInfo)Container.DataItem).FileName%></asp:LinkButton>
,然后在repeater的OnItemCommand事件中想通过e.Item.DataItem来获取值,但是跟踪时发现提示“未定义的值”,结果取不到对应那行的记录。
但是我在一些例子中发现他们使用((DataRowView)e.Item.DataItem来获取对应行的记录,为什么我却不行呢?
问题点数:100、回复次数:10Top
1 楼ztchen(感谢csdn,回馈csdn,每周答几贴)回复于 2005-08-01 01:44:23 得分 30
今天二帖了。。。既然看到了,就帮你一把吧
楼主应该用findcontrol方法来找dataitem里的控件,因为每个dataitem都会根据邦定数据来动态生成其内部的子控件,所以你光凭控件名是不能获取到该子控件的。
linkbutton lnkBtn=e.item.findcontrol("yourlnkbuttonname");
这样就可以找到该子控件,然后就可以取其值或做其他事Top
2 楼saucer(思归)回复于 2005-08-01 07:42:22 得分 30
when ItemCommand is triggered, DataItem is no longer available, you should do
<asp:LinkButton id="yourlnkbuttonname" Runat="server" CommandName="downs" Text='<%#((PostInfo)Container.DataItem).FileName%>'></asp:LinkButton>
then in ItemCommand, use the method suggested by ztchen
LinkButton lnkBtn=e.Item.FindControl("yourlnkbuttonname") as LinkButton;
string s = lnkBtn.Text;Top
3 楼xtxk_917(小强)回复于 2005-08-01 08:41:37 得分 5
学习。Top
4 楼spoky(夜游魂)回复于 2005-08-01 16:49:25 得分 0
这样确实可以取到,但是现在我想要的是整个记录的多个字段来重组一个串,所以可能只能是传进来一个id,然后再到数据库去取相关的记录了。Top
5 楼spoky(夜游魂)回复于 2005-08-01 17:17:19 得分 0
如果datagrid好像就可以取到对应行的记录?Top
6 楼ztchen(感谢csdn,回馈csdn,每周答几贴)回复于 2005-08-02 00:55:21 得分 5
搂主把datagrid怎样用啊?
“我想要的是整个记录的多个字段来重组一个串”楼主这句话什么意思?
“如果datagrid好像就可以取到对应行的记录?”楼主问题越来越深了,看不懂Top
7 楼zeusvenus()回复于 2005-08-02 07:39:31 得分 10
用e.Item.FindControlTop
8 楼cuike519(I will be back!)回复于 2005-08-02 07:56:39 得分 20
如果想从DataGrid里面直接取值而不从数据库中取则需要遍历e.Item.Cells的所有元素来找到绑定的值。Cells代表当前行的所有列!Top
9 楼spoky(夜游魂)回复于 2005-08-03 21:07:03 得分 0
我后来用Session来保存了这个变量,不过这样就有一个问题,当这个客户通过其他连接再新建这个页面,那么session保存的旧页面的对象也就跟到这里来了,而且旧页面又还打开着,需要用到这个变量,那么是否这种情况都不应该用session来保存呢?我用viewstat来保存的时候,却提示“类型xxx必须标记为 Serializable 或者具有 ReferenceConverter 以外的 TypeConverter,才能被放置在视图状态中。”
真不知道该如何来做了。Top
10 楼spoky(夜游魂)回复于 2006-01-19 16:21:57 得分 0
菜鸟的基础问题特别多,呵呵,多多包涵,发现使用ViewState还是很有好处的。Top




