2008-09-24 3 views
2

ASP.NET에서 개체 배열을 사용하여 gridview를 databind하면 사용자가 행을 선택할 때 foo (인덱스)를 검색하고 사용할 수 있습니까?GridView 행 개체 유형

Private Sub gv1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv1.RowCommand 

     If e.CommandName = "Select" Then 
      'get and use foo(index)  
     End If 
    End Sub 

답변

2

데이터 원본의 항목 순서가 변경되지 않았는지 확인할 수있는 경우 CommandEventArgs의 CommandArgument 속성을 사용할 수 있습니다.

그러나보다 강력한 방법은 GridView의 DataKeys/SelectedDataKey 속성을 사용하는 것입니다. 유일한주의 사항은 명령에 "Select"유형이 있어야한다는 것입니다 (기본적으로 RowCommand는 DataKey에 액세스 할 수 없습니다).

목록을 구성하는 엔티티에 고유성이 있다고 가정하면 GridView의 DataKeys 속성에 하나 이상의 키 속성 이름을 설정할 수 있습니다. GridView에서 선택한 항목이 설정되면 키 값을 검색하고 바운드 목록에서 항목을 찾을 수 있습니다. 이 메서드는 GridView에서 서수 위치가 데이터 소스에서 요소의 서수 위치와 일치하지 않는 문제를 해결합니다.

예 :

<asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True" 
    DataKeyNames="Name" onrowcommand="GridView1_RowCommand1" 
    onselectedindexchanged="GridView1_SelectedIndexChanged"> 
</asp:GridView> 

다음과 같은 페이지에 대한 코드 숨김 (또는 인라인) 볼 수있는 작품 : 다른 선택의 Rows 컬렉션에서 동굴 탐험 갈 것

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Value is the Name property of the selected row's bound object. 
    string foo = GridView1.SelectedDataKey.Value as string; 
} 

GridView는 컨트롤 값을 가져 와서 한 번에 하나의 열을 가져 오지만 필요하지 않으면 그렇게하지 않는 것이 좋습니다.

희망이 도움이됩니다.

0

이론의 행의 인덱스가, foo는의 인덱스해야

행 선택에

dim fooArr() as foo; 
gv1.datasource = fooArr; 
gv1.databind(); 

즉 (어쩌면 한 헤더 행에 대해, 당신은 테스트해야합니다). 그래서, 당신은이 라인

dim x as object = foo(e.row.selectedIndex) 

다른 대안은 버튼의 commandArgument 속성에 인덱스를 데이터 바인딩하는 방법을 찾는 것입니다 함께 뭔가를 할 수 있어야합니다.

0

아마도이 방법을 사용하는 것이 더 좋겠지 만 행의 CommandArgument 속성을 해당 인덱스로 설정할 수 있습니다. 그런 다음 foo(CInt(e.CommandArgument))과 같은 무언가가 트릭을합니다.