如何将值从Listview内的控件传递到外部的另一个控件

时间:2011-01-28 16:42:30

标签: asp.net listview controls

我有一个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中的Textbox从数据库中获取数据并进行填充。我还有一个寻呼机,可以在没有问题的情况下移动一条记录。

现在,我想让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

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

2 个答案:

答案 0 :(得分:0)

需要考虑的事项:

  1. ListView是否在另一个容器控件中?
  2. ListView1是否返回ListView类的实例?
  3. 在表单中添加一个按钮,并将其单击事件连接到您的代码。它现在有效吗? 4.在调用代码时,数据是否已绑定到ListView?
  4. 这些类型的错误消息可能有点误导,所以我发现最好从头开始,不要对发生的事情做出任何假设。

    祝你好运!

答案 1 :(得分:0)

感谢您的回答。

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

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

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

然后在Code Behind中我添加了这个:

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

现在它有效!不知道这是不是最好的方式,但它确实有效。