2011-09-15 4 views
1

DetailsViewフィールド(c#)内のテキストボックスのテキストをどのように設定することができますか?DetailsView内のテキストボックスへのアクセス

私はいくつかのバリエーションを試しましたが、すべてがコンテキストから復帰し、オブジェクト参照はエラーを設定しません。 HERESに私のコード

...

ASPX:

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px"> 
    <Fields> 
     <asp:TemplateField HeaderText="Header Text"> 
      <InsertItemTemplate> 
       <asp:TextBox ID="TextBox1" runat="server" Text="test"></asp:TextBox> 
      </InsertItemTemplate> 
     </asp:TemplateField> 
    </Fields> 
</asp:DetailsView> 

CS:

TextBox txt = (TextBox)DetailsView1.FindControl("TextBox1"); 
txt.Text = "Text "; 

乾杯

+0

コードビハインドのどの時点でこれをやっていますか? 'TextBox'にアクセスしようとする前に** Detailsviewに何か**があることを確認しましたか?あなたが示したコードは私にとっては大丈夫だと思うので。 – jadarnel27

+0

こんにちは、そこにPage_Load()、その中のtheresデータ、ダブルチェック – Developr

+0

私はまた、行を介して参照しようとしましたまた、物事を混乱させていた動的に作成されたIDがないことを確認しました – Developr

答えて

1

というエラーはおそらくまだあなたDetailsViewでは何も存在しないことを意味します。あなたのコードでこれを入れた場合、私は賭け:

TextBox txt = (TextBox)DetailsView1.FindControl("TextBox1"); 
if (txt != null) 
{ 
    txt.Text = "Text "; 
} 

あなたはtxtが、実際には、nullであることがわかります - FindControl方法はDetailsViewに「TextBox1テキストボックス」という名前の何かを見つけることができませんでしたので、これはです。

あなたはDetailsViewは(それがDataSourceにバインドされていますならば、あなたはDetailsViewDataBoundイベントでこれを行うことができます)が取り込まれている知っているポイントにこのコードを移動する必要があります。

また、あなたのTextBoxInsertItemTemplateであることに気付きました。あなたは見つけることができません、あなたが編集モードでDetailsViewを入れTextBox1まで、いずれかのデフォルトで:背後

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" 
     DefaultMode="Insert"> 

かのコード:

DetailsView1.ChangeMode(DetailsViewMode.Insert); 
TextBox txt = (TextBox)DetailsView1.FindControl("TextBox1"); 
txt.Text = "Text "; 

うまくいけば役立ちます。

+0

こんにちは、確かにDetailsViewのデータです。 Iveはあまりにも古くなった古いHTMLテキストボックスを追加しようとしましたが、そのコントロールを見つけようとしました。エラーはありませんが、まだデータを入力していません。奇妙な – Developr

+0

@Developr:私は考えた別の可能性のある問題で私の答えを編集しました。それがあなたを助けるかどうかを教えてください。) – jadarnel27

+0

こんにちはjadarnel27 - 残念ながら運はありません。私はすでに正しいモードであることを確認していました。 On_Loadの前に作成されたHTMLコントロールですか?私のOn_Loadアクションは、まだ存在していないコントロールに値を設定しようとしています。 – Developr

0

@ jadarnel27 DataBoundイベントにコードを記述していただきありがとうございます。テキストボックス値がボタンクリックイベントでDetailsViewフィールド(DefaultMode = Insert)にのみ渡される同様の問題がありました。私はボタンが欲しくない/必要がありませんでした。

私のシナリオ:コードは、detailsviewが必要かどうかを(挿入のために)識別します。ドロップダウンコントロールから選択した人物に基づいてレコードが存在しない場合、そのPersonIDはdetailsviewのPersonフィールドに事前ロードされます。

FindControlを使用すると機能しませんでしたが、次のコードを使用すると、DataBoundコントロールに置かれました。

// Get person selected from dropdown control and pass to DetailsView first row/cell 
txtPerson.Text = Convert.ToString(ddlPersonSelect.SelectedValue); 

TextBox tb = (TextBox)DetailsView1.Rows[0].Cells[1].Controls[0]; 
if (tb != null) 
{ 
tb.Text = txtPerson.Text; 
} 

これは私のような別の初心者に役立つことを願っています。

関連する問題