((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])).Text; 转换出错获取不到值的解析

Posted lyichemistry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])).Text; 转换出错获取不到值的解析相关的知识,希望对你有一定的参考价值。

         <asp:TemplateField HeaderText="序号">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox2" runat="server" Text=‘<%# Bind("序号") %>‘ Width="64"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:Label ID="Label2" runat="server" Text=‘<%# Bind("序号") %>‘ Width="68"></asp:Label>
                                    </ItemTemplate>
 </asp:TemplateField>

 

 

string s0 = GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0].GetType().ToString();
//{Name = "LiteralControl" FullName = "System.Web.UI.LiteralControl"}

string s1 = GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[1].GetType().ToString();
//{Name = "TextBox" FullName = "System.Web.UI.WebControls.TextBox"}

string s2 = GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[2].GetType().ToString();
//{Name = "LiteralControl" FullName = "System.Web.UI.LiteralControl"}

事实上 html中设计是textbox, 但是编译器在内部给添加了两个LiteralControl类。返回值如下:

 string s4 = ((LiteralControl)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])).Text;
//返回值是\r\n
  string s5 = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].FindControl("TextBox2"))).Text;
//返回值是“我的序号”
  string s6 = ((LiteralControl)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[2])).Text;
//返回值是\r\n

也就是说其实网上bbs常见的提问里的解决方法用的

string s9 = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])).Text;
//常见的强制类型转换出错且获取不到控件的原因是序号不对,而这个在MSDN里是没有说明的

string s10 = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[1])).Text;
//应该用.Controls[1]

 



 

很多文章在讲解如何获取多控件的时候建议使用

string s4= ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[1])).Text;
//当存在多个控件 的时候可以尝试用gettype方法看一下哪个是你需要的textbox控件。
string s5 = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].FindControl("TextBox2"))).Text;
//这个方法与上述的Controls[1]其实是等效的。

 

以上是关于((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])).Text; 转换出错获取不到值的解析的主要内容,如果未能解决你的问题,请参考以下文章

gridview中检索出一条符合条件的记录,但一点修改,就显示了整个表,而且也不是我要修改的那一行了。

初学.net,请高手指点

c# gridview 分页后根据内容改变字体颜色

怎样获取gridview中数据总行数

ASP.NET 中Double.Parse(String)转换问题

怎样隐藏DataTable中的某一列