【问题标题】:Get Values in GridView textbox TemplateField在 GridView 文本框 TemplateField 中获取值
【发布时间】:2013-10-09 07:59:15
【问题描述】:

我有一个名为 Default.aspx 的 asp.net 页面,它的母版页是 Site.master。在 Default.aspx 中,我添加了一个带有 3 个数据绑定字段和 1 个模板字段的网格视图,然后在此模板字段中拖动了一个文本框。

我正在尝试使用 FindControl 方法获取此网格视图中每一行的文本框值,但它没有返回任何内容。

这是我用来检索这些值的代码:

For Each gvr As GridViewRow In GridView1.Rows

        Dim tb As TextBox = DirectCast(gvr.FindControl("TextBox1"), TextBox)
        Dim txt As String = tb.Text
        MsgBox(txt)

    Next

注意:我正在使用 masterPages,我认为这是导致问题的原因。

[编辑]

在Page_load事件中,为了绑定gridview,我使用了代码:

        GridView1.DataSource = f.xDa
        GridView1.DataBind()

在 Button1 中,我添加了代码:

For Each gvr As GridViewRow In GridView1.Rows

        Dim tb As TextBox = DirectCast(gvr.FindControl("TextBox1"), TextBox)
        Dim txt As String = tb.Text
        MsgBox(txt)

    Next

但我总是得到一个空的文本框。

谢谢大家!

【问题讨论】:

  • 您在哪里调用该代码?如果 GridView 尚未绑定数据,则可能不会显示任何内容。另外,该代码是否会引发错误,或者您只是在 MsgBox 中得到一个空字符串?
  • 是的,Gridview 工作正常,代码如下: GridView1.DataSource = f.xDa GridView1.DataBind() 但是,当我在文本框中键入时,我无法获取其中的值... . 在这种情况下,我在 msgbox 中得到一个空字符串。
  • 你的问题中的代码是在什么事件中执行的?
  • 在 Page_Load 中:GridView1.DataSource = f.xDa GridView1.DataBind() 在一个名为 Button1 的按钮中,我将代码: For Each gvr As GridViewRow In the GridView1.Rows Dim tb As TextBox = DirectCast(gvr.FindControl("TextBox1"), TextBox) Dim txt As String = tb.Text MsgBox(txt) Next
  • 请使用“编辑”按钮使用相关代码更新您的问题。这里的 cmets 太难理解了 =)

标签: asp.net vb.net gridview findcontrol


【解决方案1】:

您需要将您的Page_Load 代码更新为:

If Not IsPostBack Then
    GridView1.DataSource = f.xDa
    GridView1.DataBind()
End If

当您的代码到达Button_Click 事件时,它已经使用数据库中的数据重新填充了 GridView(覆盖了用户在 TextBox 中键入的内容)。

我在上面添加的代码只在第一次加载数据 - 然后 ASP.NET 视图状态处理确保 GridView 的状态保持最新。

【讨论】:

  • 嘿伙计,你拯救了我的一天!!!效果很好!!嘿@jadarnel27 我怎样才能对你的帖子表示感谢?我是新来的!
  • @DiegoOliveira 非常感谢您的评论、点赞和接受 =) 很高兴能够帮助您。我会说,当您有能力时,也可以通过为网站提供好的答案来“付出代价”。
【解决方案2】:

我遇到了类似的问题,但我的 gridview 没有在 Page_Load 处呈现,因此我无法将“If Not IsPostBack”绑定添加到 Page_Load,因为我使用的 SQL 数据集尚未声明。

如果您不能使用 Page_Load gridview 数据绑定,那么尝试这样的方法可能会起作用,而不是 FindControl 并按名称调用您的文本框:

For Each gvr As GridViewRow In GridView1.Rows

    Dim txt As String = CType(gvr.Cells(0).Controls(0), TextBox).Text
    MsgBox(txt)

Next

Cells(0) 中的 (0) 是您尝试访问的网格视图中的列号。例如,如果“TextBox1”是第 1 列,则使用 Cells(0),如果是第 2 列,则使用 Cells(1),依此类推。这允许检索文本框中的文本,而无需在 Page_Load 中添加额外的部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多