【问题标题】:How to pass value from a control inside a Listview to another control outside如何将值从 Listview 内部的控件传递到外部的另一个控件
【发布时间】:2011-11-24 14:30:54
【问题描述】:

我有一个 Listview 当时显示一条记录。这是一个非常简单的例子:

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="bol_id" ItemPlaceholderID="itemPlaceholder">
<ItemTemplate>
 Textbox inside<asp:TextBox ID="txtInside" runat="server" Text='<%# Eval("bol_id") %>'></asp:TextBox> 

</ItemTemplate>
</asp:ListView>
 Textbox Outside<asp:TextBox ID="txtOutside" runat="server" Text=""></asp:TextBox> 

一切正常,ItemTemplate 中的文本框从数据库中获取数据并填充。我还有一个寻呼机,可以一次移动一条记录而不会出现问题。

现在,我想获取 ItemTemplate 外部的 Textbox 以获得与内部 Textbox 相同的值。但我无法让它发挥作用。当我尝试这个和类似的代码时:

这段代码放在页面加载后面的代码中:

    Dim tb As TextBox = DirectCast(ListView1.FindControl("txtInside"), TextBox)

    txtOutside.Text = tb.Text

我得到的只是错误:

Object reference not set to an instance of an object

任何人,有一个很好的解决方案如何访问这个控件并将其值传递给另一个控件?

【问题讨论】:

    标签: asp.net listview controls


    【解决方案1】:

    需要考虑的事项:

    1. ListView 是否在另一个容器控件中?
    2. ListView1 是否返回 ListView 类的实例?
    3. 向表单添加一个按钮并将其单击事件连接到您的代码。它现在有效吗? 4. 调用代码时数据是否已经绑定到ListView?

    这些类型的错误消息可能有点误导,所以我发现最好从头开始,不要对正在发生的事情做任何假设。

    祝你好运!

    【讨论】:

      【解决方案2】:

      感谢您的回答。

      我一直在尝试,直到找到解决方案。这就是我所做的:

      在 ListView 部分,我添加了一个OnPreRender 部分:

      <asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="bol_id" ItemPlaceholderID="itemPlaceholder" OnPreRender="ListView1_OnPreRender">
      

      然后在后面的代码中我添加了这个:

      Protected Sub ListView1_OnPreRender(ByVal sender As Object, ByVal e As EventArgs)
      
          If ListView1.EditIndex > -1 Then
              ' because I need to avoid error when in Edit mode
          Else
      
              Dim tb As TextBox = Nothing
      
              For Each item As ListViewDataItem In ListView1.Items
      
                  tb = DirectCast(item.FindControl("txtInsideId"), TextBox)
      
                  If tb.Text IsNot Nothing Then
                      txtOutsideId.Text = tb.Text.ToString
                  End If
              Next
      
          End If
      
      
      End Sub
      

      现在它可以工作了!不知道这是否是最好的方法,但它确实有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-26
        相关资源
        最近更新 更多