2009-10-30 2 views
1

포스트 백 후에 데이터 바인딩 된 항목에 어떻게 액세스합니까?포스트 백 후에 데이터리스트의 선택된 항목에 액세스하는 방법은 무엇입니까?

은 내가 DataList에 있고, 사용자가 항목의 OnItemCommand 이벤트가 발생을 선택하고, 때 내 이벤트 핸들러는이 liek 같습니다

protected void dlResults_Select(object sender, DataListCommandEventArgs e) 
{ 
    MyItem item = e.Item.DataItem as MyItem; 
} 

항목은 항상 null입니다. 데이터 바인딩 된 항목에 액세스 할 수있는 방법이 있습니까?

+0

컨트롤을 리 바인드해야합니다. ViewState는 데이터 바인딩 된 항목을 유지하지 않습니다. –

답변

0

이 유형의 문제에서 가장 단순한 접근 방법은 입력 컨트롤 (type = hidden)을 컨트롤의 선택된 값으로 업데이트하는 컨트롤에 javascript 이벤트를 추가하는 것입니다. 태그에 runat = server 속성을 추가하면 입력 제어 서버 측에 액세스하여 값을 읽을 수 있습니다. 자바 스크립트 이벤트 이후 포스트 백이 발생해야 모든 것이 정상적으로 작동합니다.

1

DataItem 속성은 ItemDataBound 이벤트를 통해 액세스 할 때만 null이 아닙니다. 개체/레코드를 수정하는 데 ID가 필요한 경우 DataList의 DataKeyField 속성을 설정하여 DataKeys 컬렉션을 채울 수 있습니다.

<asp:DataList ID="DataList1" runat="server" DataKeyField="id"> 
</asp:DataList> 

그런 다음 원하는 개체를 인스턴스화하기 위해 OnItemCommand 이벤트에 ID를 사용하거나 데이터베이스 쿼리에 매개 변수로 할 수 있습니다.

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]); 
    MyItem item = new MyItem(id); 
} 
0

귀하의 질문에 대한 적절한 답변은 귀하가 데이터 바인딩을하는 방식을 알고있는 경우에만 제공 될 수 있습니다. 데이터리스트의 .DataBind() 메소드를 호출하여 코드에서 데이터 바인딩을 수행하고 있는지, 또는 데이터리스트에 바인드 할 데이터 소스를 제공하고 있는지 확인하십시오. 내가이 질문을하는 이유는 데이터리스트를 바인딩하기 위해 코드에서 datalist의 .DataBind() 메소드를 사용할 경우, 데이터리스트가 다시 데이터 바인딩되도록 확실히하기 위해 모든 포스트 백에서 호출해야 할 것입니다. 그렇지 않으면 포스트가 끝난 후에 데이터리스트가 비어있는 것을 볼 수 있습니다. DataSource 또는 DataSourceId 속성을 사용하여 바인딩 할 데이터 목록에 데이터 소스를 제공하는 경우 각 포스트 백에서 데이터 목록의 데이터 바인딩이 프레임 워크에 의해 처리되므로 사용자는이를 염려 할 필요가 없습니다.

그러나 나는 잘못된 장소에서 DataItem의 값을 얻으려고하기 때문에 당신이 null 값을 얻고 있다고 생각합니다. 컨트롤의 올바른 라이프 사이클을 따라야 제대로 작동하도록 할 수 있습니다.

위 검색어에 대한 답변을 더 잘 제공 할 수 있습니다. 귀하의 현재 성명서가 관련 답변을 제공하기에 불충분 한 것으로 보입니다.

관련 문제