【问题标题】:gridview findcontrol returning empty ""gridview findcontrol 返回空“”
【发布时间】:2011-10-28 16:36:01
【问题描述】:

我正在尝试使用此代码从 gridview 中的文本框读取数据

    protected void Button1_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            string textBoxText = ((TextBox)row.FindControl("numTC")).Text;
            Response.Write(textBoxText);

        }
    }

这段代码一直返回“”(空)

知道为什么会这样吗?

谢谢

【问题讨论】:

  • 它有什么价值吗?
  • 我正在通过网站手动添加值,将它们全部读取为“”而不是 null
  • @Karl:你是用visual studio调试的吗?
  • 是的,这就是我如何找到它返回的内容
  • 当您单击按钮时,页面上文本框中的值是否变回空白?

标签: c# asp.net visual-studio-2010 gridview findcontrol


【解决方案1】:

更新:

出于测试目的,请尝试执行 GridView1.DataBind();在您的方法开始时。

尝试像这样调试:

在 Button1_Click 方法的末尾设置断点。

在调试模式下运行站点 (F5)。

当执行在 Button1_Click 结束时停止时,打开位于屏幕底部的即时窗口。

在那里输入:

GridView1.Rows 看看它是否包含它应该包含的行数。

应该是这样的:

System.Web.UI.WebControls.GridViewRowCollection} 计数:53

如果返回的行数超过 0 行,则输入:

GridView1.Rows[0].Controls 并查看它是否返回一行中正确数量的控件。

我可以使用 GridView1.Rows[2].Controls[n] 直接访问一行上的控件,其中 n 是该行中控件的顺序。

也可以试试 (TextBox)GridView1.Rows[0].FindControl("numTC") 看看它会返回什么。

【讨论】:

  • 按照你说的做了,行数显示为79,(TextBox)GridView1.Rows[0].FindControl("numTC") 仍然返回""
  • @Karl:我唯一能想到的是您正在搜索的控件的 ID 与“numTC”不同,我犯了一次错误,并没有注意到 :)
  • 我也试过了..但不幸的是不是这样,我一直想看看有什么问题,谢谢
  • @Karl:GridView1.Rows[0].FindControl("numTC") 返回 null 吗?
  • 当我做 response.write 时,它​​只返回 System.Web.UI.WebControls.TextBox
【解决方案2】:

确保您没有在页面的 PostBack 上重新绑定 GridView。这可能是问题所在。

编辑

确保绑定 GridView 的代码在以下代码中:

C#

if ( !Page.IsPostBack ){
    // Code to bind the control
}

VB

If Not Page.IsPostBack Then
    ' Code to bind the control
End If

否则会发生控件被“重建”并且文本框内的值全部丢失

【讨论】:

  • gridview 绑定在 page_load 上,当我点击按钮时它似乎正在重新加载页面,我该如何安排呢?
  • 您在哪里添加了此代码?不要将其添加到按钮单击
  • 那我理解错了,我应该在哪里添加它?我应该在它正在做gridview的数据绑定的地方做吗?
  • 是的,您是否将数据绑定到 GridView。
猜你喜欢
  • 2018-02-16
  • 2012-10-31
  • 2013-03-16
  • 2012-01-25
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多