首页 新闻 会员 周边 捐助

怎么在gridview同时用回调函数同时又能够用cell取值?

0
悬赏园豆:50 [已解决问题] 解决于 2008-12-15 15:25

如题

在gridview里面需要通过标识显示名称 代码如下:

 

<asp:TemplateField   HeaderStyle-Width="60px"   HeaderText="关联课程">
<ItemTemplate>
<%# GetCourse(Eval("CourseId"))%>
</ItemTemplate>

</asp:TemplateField>

 


但是由于我同时需要将显示同样的上下行合并

我调用的时候一个通用的合并相同的行的公用方法

它里面是通过cells来取值判断,然后合并行

gvr.Cells[cellNum].Text

这样算是标准的获取gridview某行某列值的做法

但是如果我用这种方式绑定

 

<ItemTemplate>
<%# GetCourse(Eval("CourseId"
问题补充: 好像cnblog出bug了 后面的东西发不上去 下面为发不上去的部分 但是如果我用这种方式绑定 <ItemTemplate> <%# GetCourse(Eval("CourseId"))%> </ItemTemplate> 那么cell取出的值就是空 不知道各位在遇到这种情况的时候怎么处理的 原则上是不希望修改合并行的函数的因为那个算是个通用函数
小眼睛老鼠的主页 小眼睛老鼠 | 老鸟四级 | 园豆:2731
提问于:2008-12-08 11:17
< >
分享
最佳答案
0

模板列的.Text一定是空的,像这样的情况会生成一个一般会生成一个Literal控件。

用gvr.Cells[cellNum].Controls[0]可以得到这个Literal控件。

<ItemTemplate>
<asp:TextBox ID="txtTempT" runat="server"/>
</ItemTemplate>

上面这个.Controls[0]也是一个Literal控件。因为如果ItemTemplate里的控件没有紧跟着<ItemTemplate>后写(有空格或空行)也会在这个控件之前生成一个Literal控件。所以第二个.Controls[0]并不是txtTempT而是一个Literal。如果要让txtTempT通过.Controls[0]找到就必须像下面这样写:(前面不能有任何空)

<ItemTemplate><asp:TextBox ID="txtTempT" runat="server"/>
</ItemTemplate>

你这个问题应该就是这个TemplateField问题引起的,设几个断点看看TemplateField里的Controls里都有些什么你就了解了。

另外:如果还取不到值可以先通过客户端的javascript将这行的内容保存到几个hiddenField里。服务器端从hiddenField里取值。

方法是多样的~呵呵

BB_Coder | 小虾三级 |园豆:797 | 2008-12-08 12:42
其他回答(2)
0

在ItemTemplate中天就爱一个Lable控件:

<ItemTemplate><asp:Label ID="lblID" runat="server"/>
</ItemTemplate>
就可以使用下面的代码:
 if (e.Item.ItemType == ListItemType.Item) 
{
 Label lblID = (Label)e.Item.FindControl("lblID"); 
 }

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2008-12-08 14:45
0

<ItemTemplate>
<%# GetCourse(Eval("CourseId"))%>
</ItemTemplate>
那么cell取出的值就是空

 

:你在RowDataBound中 用 下面的语句试试:

DataBoundLiteralControl c = item.Controls[0] as DataBoundLiteralControl;
string s = c.Text;

:你在RowCreate中 用 下面的语句试试:

DataRowView row = (DataRowView)e.Item.DataItem;// 不一定是DataRowView也可能是业务对象
string s = c.Text;

要有好的心情 | 园豆:502 (小虾三级) | 2008-12-11 09:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册