2016-09-02 9 views
0

このトピックの一部であるformview内のコントロールにバインドされたasp:SqlDataSourceを制御する角度からこれが近づいていましたが、だから私はそのスレッドを閉じて、これは私にもっと意味をなさないように見えるので、代わりにformviewの内部でコントロールレベルでこれにアプローチしました。asp:formview内のネストされたコントロールの値をC#コードの背後に設定

バックグラウンド下のコードは、下のスクリーンクリップの最初の2行に列挙された文字列値(および対応するコードブロックの下部にある対応する2つのResponse.Write)を挿入するためのものです。私がやろうとしています何 enter image description here

、これらの項目の場合、テキスト値を設定するためにFindControlを使用している(しかし、私はいくつかのASPを持っている:チェックボックスのこれは、同様に同じが必要になりますように行わ取得した後に対処します私はこれらの2つのコントロールに集中しています。有するID = "AddItemFv" とFormViewコントロール:これらの両方は、ASPの内部に座っている

<asp:TextBox Text='<%# Bind("SubmitDT") %>' runat="server" ID="SubmitDTTextBox" /> 

:テキストボックス:ASPラベル

<asp:Label runat="server" ID="SubmitByLbl" Text='<%# Eval("SubmitBy") %>' ></asp:Label> 

次される:最初はAspでありますDataSourceID = "AddInvAsset"(このディスカッションでは無関係ですが補足情報として提供されています)。ここで

は私の問題がどこにあるの背後にあるコードです:

namespace CInTrac 
{ 
public partial class AddAsset : System.Web.UI.Page 
{ 
    protected void Page_Preload(object sender,EventArgs e) 
    { 

     AddInvAsset.SelectParameters.Add("SubmitBy", Session["RegUser"].ToString()); 
     AddInvAsset.SelectParameters.Add("SubmitDT", DateTime.Now.ToString("MM/dd/yyyy")); 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     Label uname = (Label)AddItemFv.Row.FindControl("SubmitBy"); 
     if (uname != null) 
      uname.Text = Session["RegUser"].ToString(); 

     TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDT"); 
     if (udate != null) 
      udate.Text = DateTime.Now.ToString(); 

     Response.Write("<b>Submitted by should be:</b> = " + Session["RegUser"].ToString() + "<br>"); 
     Response.Write("<b>Submit Date should be:</b> = " + DateTime.Now.ToString("MM/dd/yyyy") + "<br>"); 
    } 

} 

} 

私がいる問題は、あなたが上記の例で見たものだけです。何もない!私はC#の新機能ですので、ここで私のコードに間違ったことをしています。デバッグでは、nullをチェックすると、各VARの.Textに値を割り当てられないため、値が表示されません。

更新: IMが指摘しているように、コード内のコントロールの名前が間違っていました。以下は、上のコードを修正したものです。もう一度私の誤りを指摘するための肯定的な思いを抱いています。 :

 protected void Page_Load(object sender, EventArgs e) 
    { 
     Label uname = (Label)AddItemFv.Row.FindControl("SubmitByLbl"); 
     if (uname != null) 
      uname.Text = Session["RegUser"].ToString(); 

     TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDTTextBox"); 
     if (udate != null) 
      udate.Text = DateTime.Now.ToString("MM/dd/yyyy"); 
    } 

答えて

1

コントロールのIDは

変更

Label uname = (Label)AddItemFv.Row.FindControl("SubmitBy"); 
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDT"); 

EDIT

Label uname = (Label)AddItemFv.Row.FindControl("SubmitByLbl"); 
TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDTTextBox"); 

あなたは間違っていますFindControlをFormViewイベントに移動する必要があります。コントロールは、FormViewが完全に作成され、データバインドされた後にのみアクセスできます。page_loadからYourFormView_Databoundイベントにコードを移動してください。

protected void YourFormView_DataBound(Object sender, EventArgs e) 
{ 
    Label uname = (Label)AddItemFv.Row.FindControl("SubmitByLbl"); 
     if (uname != null) 
      uname.Text = Session["RegUser"].ToString(); 

     TextBox udate = (TextBox)AddItemFv.Row.FindControl("SubmitDTTextBox"); 
     if (udate != null) 
      udate.Text = DateTime.Now.ToString(); 
} 
+0

オーケー、あなたは、コントロールの名前で私をつかまえたが、問題は、それがnullチェックした後、これらの各VAR.Textに文字列の割り当てを超えてのステップということはまだあるとして、それは問題ではありませんでした。しかし、問題になっていた制御名を捕まえてくれてありがとう。 –

+0

@KenCarter I;答えを編集しました。DataBoundイベントでコードを実行してください。 –

+0

mmmmm「クロウ」は今日は特に良いことを知っているよ!私は当初、コードの 'Preload'セクションの行を編集しましたが、これはNow Goneです!必ずしも必要ではありません。私がやったことを理解したら、正しいコードを変更してデバッグを実行し、ヌルチェックで値を割り当て、ワーラーにすることができました!!それはうまく動作します!ありがとうIM!私の厚い頭蓋骨に申し訳ありません! –

関連する問題