2011-09-15 6 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

안녕하세요, 거기 Detailsres에서 나중에 확실히 데이터. Ive는 거기에 일반 오래된 html 텍스트 상자를 추가하려고 시도하고 그 컨트롤을 찾는 시도. 오류는 없지만 상자에는 데이터가 채워지지 않습니다. 이상한 – Developr

+0

@Developr : 나는 방금 생각한 다른 가능한 문제로 나의 대답을 편집했다. 그게 당신을 도와 준다면 알려주세요.) – jadarnel27

+0

안녕하세요 jadarnel27 - 불행히도 행운이 없습니다. 이미 올바른 모드인지 확인하고있었습니다. On_Load 전에 생성 된 html 컨트롤은 무엇입니까? 그것의 거의 같은 Tho 내 행동 On_Load에 아직 존재하지 않는 컨트롤을 채우려고 노력하고있다 – Developr

0

@ jadarnel27 DataBound 이벤트에 코드를 두는 것에 대해 감사드립니다. 비슷한 문제가 어디 TextView 값을 단추 클릭 이벤트를 DetailsView 필드 (DefaultMode = 삽입) 전달할 수 있습니다. 나는 버튼을 원하지 않거나 필요로하지 않았다.

내 시나리오 : 코드는 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; 
} 

나는 이것이 저와 같은 또 다른 초보자에게 도움이되기를 바랍니다.

관련 문제