2012-04-23 12 views
1

私はASP.NET WebアプリケーションでListViewを持っています。ユーザーが編集ボタンをクリックすると、そのアイテムの特定の値に依存するテキストフィールドをポップアップします。しかし、私はListView1_ItemEditing()関数内のコントロールを見つけることができないようです。ListView ItemEditingでFindControl()を呼び出せません

私はMicrosoftのドキュメントとインターネット上のさまざまなヘルプスレッドを読んだことがありますが、その提案は私には当てはまりません。

ListViewItem item = ProductsListView.Items[e.NewEditIndex]; 
Label dateLabel = (Label)item.FindControl("DiscontinuedDateLabel"); 

私は()ListView1_ItemEditingでラベルを選択することができるようにしたい簡略化のために:これは私が見たものが一般的です。これは)(ListView1_ItemEditingのコードである:デバッグ、アイテム及びdebugLabelが共にNULLの場合ここ

protected void ListView1_ItemEditing(Object sender, ListViewEditEventArgs e) 
{ 
    DataBind(); //not sure if this does anything 
    ListViewItem item = ListView1.Items[e.NewEditIndex]; 
    Label debugLabel = (Label)item.FindControl("label_editing"); 
    debugLabel.Text = "Works"; 
} 

はASP

<EditItemTemplate> 
    <asp:Label ID="label_editing" runat="server" Text="hello world"></asp:Label> 
</EditItemTemplate> 

あります。

UPDATE:私のロジックをItemDataBoundに移動して、自分のtr(テキストボックスを含む)がその特定のデータ項目にあるかどうかをチェックすることで、この問題を解決しました。以下のコード:

protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListViewItemType.DataItem) 
     { 
      Control tr_verizon = e.Item.FindControl("tr_verizonEdit"); 
      Control tr_att = e.Item.FindControl("tr_attEdit"); 
      if (tr_verizon != null) 
      { 
       //Control tb_meid = e.Item.FindControl("TextBox_Meid"); 
       Label lbl_carrierId = (Label)e.Item.FindControl("lbl_carrierId"); 
       if (lbl_carrierId == null) 
       { 
        Message.Text = "lbl_carrierId is null!"; 
       } 
       else if (lbl_carrierId.Text.Equals("")) 
       { 
        Message.Text = "lbl_carrierId is empty!"; 
       } 
       else 
       { 
        string recordId = lbl_carrierId.Text; 

        if (tr_verizon != null && tr_att != null) 
        { 
         if (lbl_carrierId.Text.Equals("1")) 
         { 
          tr_verizon.Visible = false; 
          tr_att.Visible = true; 
         } 
         else 
         { 
          tr_verizon.Visible = true; 
          tr_att.Visible = false; 
         } 
        } 
       } 
      } 
     } 
    } 

答えて

2

項目の[編集]ボタンがクリックされたときにItemEditingイベントが発生しますが、ListView項目は、編集モードに置かれる前に。したがって、現時点ではEditItemTemplateの制御は利用できません。あなたがにDataBindを(行う必要があります

More Info and example

+0

申し訳ありませんが、お返事ありがとうございます。私が持っている問題を解決する最良のアプローチは何をお勧めしますか?私はSQLDataSourceを使用してSQL Serverからエントリのリストを取得しています。次に、ユーザーがエントリを編集したい場合は、その行に提供されているデータソースに基づいて追加のの表示を行います(具体的には、IMEIがNULLでない場合は、ATTコントロールセットを表示します。 NULLではない、私はVerizonコントロールセットを表示したい)。私はASP.NETには比較的新しいので、時には私にとって最も難しいことは何を調べるべきかを知っていることです。ありがとうございました。 – user1

+0

他のプログラマーがこの問題を解決するのを助けてくれました。私は、今後同様の問題が発生する可能性がある他の誰かのために、OPにソリューションを投稿します。 – user1

+0

これは解決策を提供しません。ちょうど説明。 –

0

あなたはsenderオブジェクトをキャストする代わりに、インデックスであなたのListViewItemにアクセスしようと試みたことがありますか?

protected void ListView1_ItemEditing(Object sender, ListViewEditEventArgs e) 
{ 
    var item = sender as ListViewItem; 
    var debugLabel = item.FindControl("label_editing") as Label; 
    debugLabel.Text = "Works"; 
} 
+0

前に行ったよう

ListView1.EditIndex = e.NewEditIndex; ListView1_BindData(); // a function that get the DataSource and then ListView1.DataBind() 

//今 'item'がnullであることを意味し、そのコントロールを見つけます。私はあなたがKafの答えを見たいと思うかもしれないと思う。 – SouthShoreAK

1

)まず、次のように:あなたは

関連する問題