2011-01-28 18 views
0

私はその時点で1つのレコードを表示している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に内部のテキストボックスには、データベースからデータを取得し、人口ます。私はまた問題のない時間に1つのレコードを移動するページャーを持っています。

ここでは、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

ご回答ありがとうございます。

私は解決策が見つかるまで試し続けました。これは私がやったことです:私はこの追加の背後にあるコードに続いて

<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 

をそして今、それが動作ListViewコントロール部には

が、私は OnPreRender一部を追加しました!それが最良の方法であるかどうかは分かりませんが、うまくいきます。

0

の考慮事項:

  1. が別のコンテナコントロールのリストビューですか?
  2. ListView1はListViewクラスのインスタンスを返しますか?
  3. ボタンをフォームに追加してクリックイベントをコードにリンクします。それは今働きますか? 4.コードが呼び出されているときに、既にデータがListViewにバインドされていますか?

これらのタイプのエラーメッセージは、誤解を招く可能性があります。そのため、最初から始めて何が起きているかについては何も仮定しないことをお勧めします。

幸運を祈る!

関連する問題