我有一个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
任何人都有一个很好的解决方案如何访问此控件并将其值传递给另一个控件?
答案 0 :(得分:0)
需要考虑的事项:
这些类型的错误消息可能有点误导,所以我发现最好从头开始,不要对发生的事情做出任何假设。
祝你好运!答案 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
现在它有效!不知道这是不是最好的方式,但它确实有效。