2011-01-28 3 views
0

Listview에 한 번에 하나의 레코드가 표시됩니다.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을 내부의 텍스트 상자는 데이터베이스에서 데이터를 가져 와서 채워 도착, 잘 작동 : 다음은 아주 간단한 예이다. 또한 문제없이 한 번에 하나의 레코드를 이동시키는 호출기가 있습니다.

이제 TextTemplate 외부의 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

답장을 보내 주셔서 감사합니다.

해결책을 찾을 때까지 계속 노력했습니다. 이것은 내가 무슨 짓을 :이 추가 뒤에 코드에 다음

<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 

를 이제 작동리스트 뷰 부분에서

, 나는이 OnPreRender 부분을 추가! 최선의 방법인지는 모르지만 작동합니다.

0

고려할 사항 :

  1. 다른 컨테이너 컨트롤에 ListView에인가?
  2. ListView1이 ListView 클래스의 인스턴스를 반환합니까?
  3. 폼에 단추를 추가하고 클릭 이벤트를 코드에 연결하십시오. 지금 작동합니까? 4. 코드가 호출 될 때 데이터가 이미 ListView에 바인딩되어 있습니까?

이러한 유형의 오류 메시지는 약간 오도 될 수 있으므로 처음부터 시작하여 어떤 일이 발생했는지에 대해 아무런 가정도하지 않는 것이 가장 좋습니다.

행운을 빈다.

관련 문제