首页 > 开发 > 综合 > 正文

(论坛答疑点滴)有的时候DataGrid取值取不到?

2024-07-21 02:16:13
字体:
来源:转载
供稿:网友
 

有的时候想取不是编辑状态的值,这个时候通常不会使用模板列中放置textbox通过e.item.findcontrol取值,有的网友问为什么取不到?这要看你前台的列怎么写的了,下面分别写出四种情况和这四种情况下面的取值方式:

<asp:datagrid id="datagrid1" runat="server" autogeneratecolumns="false" allowpaging="true">
                <columns>
                    <asp:boundcolumn datafield="vname" headertext="姓名0"></asp:boundcolumn>
                    <asp:templatecolumn headertext="姓名1">
                        <itemtemplate>
                            姓名
                        </itemtemplate>
                    </asp:templatecolumn>
                    <asp:templatecolumn headertext="姓名2">
                        <itemtemplate>
                            <%#databinder.eval(container.dataitem,"vname")%>
                        </itemtemplate>
                    </asp:templatecolumn>
                    <asp:templatecolumn headertext="姓名3">
                        <itemtemplate>
                            <asp:label id="name" runat="server" text='<%#databinder.eval(container.dataitem,"vname")%>'>
                            </asp:label>
                        </itemtemplate>
                    </asp:templatecolumn>
                    <asp:buttoncolumn text="删除" buttontype="pushbutton" commandname="del"></asp:buttoncolumn>
                </columns>
            </asp:datagrid>
列出了4种大家可能遇到的列:
(1)绑定列
(2)模板列中直接放静态的字符串
(3)模板列中直接放绑定的字符串
(4)模板列中通过label放绑定的字符串

下面说明在按下了删除按钮以后的四种取值的方式:
if(e.commandname=="del")
            {
                response.write(datagrid1.columns[0].headertext+":"+e.item.cells[0].text+"<br>");
                response.write(datagrid1.columns[1].headertext+":"+e.item.cells[1].text.trim()+"<br>");
                response.write(datagrid1.columns[2].headertext+":"+((databoundliteralcontrol)e.item.cells[2].controls[0]).text.trim()+"<br>");
                response.write(datagrid1.columns[3].headertext+":"+((label)e.item.cells[3].findcontrol("name")).text+"<br>");                
            }
(1)第一种用绑定列的方式可以直接通过cells[i].text取
(2)第二种方式也直接可以取,但是讨厌的vs.net总是会在前台把列中的内容换行,所以这里还需要对输出的东西进行去除首尾的空格
(3)第三种方式是网友问的最多的,不能直接通过cells[i].text取到值,可以通过上面给出的方法来取,同样需要去除首尾的空格
(4)第四种方式也是最简单的方式,当然你可以直接写e.item.findcontrol("name")
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表