2014-12-04 6 views
1

편집 양식 템플릿이있는 ASPxGridView가 있습니다. 이 표의 DataSource는 읽기 전용 데이터 원본 인 EntityServerModeSource입니다. 필터링과 정렬을 데이터베이스 서버에 위임하기 때문에이 조합을 사용합니다.ASPXGridView EditFromTemplate에서 보이지 않는 필드와 바인딩되지 않은 필드를 "바인딩"하는 방법?

간략한 설명을 위해 간단한 시나리오를 제공합니다. 내 EntityServerModeSource가 필드 A, B 및 C가있는 행을 반환합니다.

업데이트를 위해 수행하는 작업은 다음과 같습니다. 업데이트에 대한

<asp:TextBox Text='<%# Bind("A")%>' /> 
<asp:TextBox Text='<%# Bind("B")%>' /> 

가 나는 전자에 대한 ASPxGridView 이벤트의 RowUpdating에서 3 개 개의 매개 변수의 A, B와 C를 예상하는 저장 프로 시저를 확인했다 : EditFormTemplate에서 나는 내가 좋아하는 A와 B 뭔가 필드에 바인딩 컨트롤이 .NewValues ​​콜렉션. 문제는 필드 A와 B만이 아니라 C가 포함되어 있다는 것입니다. 이것은 필드 C가 컨트롤에 바인딩되지 않았기 때문에 예상되고 정상적인 것입니다. 예 : NewValues ​​[ "C"]는 null을 반환합니다. 하지만 C의 오래된 값이 필요하므로이 세 가지를 모두 예상하는 저장 프로 시저에 전달할 수 있습니다. 데이터베이스의 기존 값을 덮어 쓰므로 일부 값만 만들 수는 없습니다.

<div style="display: none"> 
    <asp:TextBox Text= '<%# Bind("C")%>' /> 
</div> 

이제 필드 C가 바인딩과의 RowUpdating 이벤트에 내가 액세스 할 수 있습니다

내 해키 솔루션은 C를 필드 그것이 보이지과 같이 할 결박, EditFormTemplate 내부 더미 컨트롤을 만드는 것이 었습니다 e.OldValue [ "C"]와 함께. 그러나 이것은 해키 한 해결책이며 나는 그것을 좋아하지 않습니다. 코드 숨김 또는 필드 C를 OldVaues 및 NewValues ​​컬렉션에 표시하도록 필드 C를 "바인딩"하는 방법이 있습니까?

답변

0

UI 요소에 바인딩되지 않은 값을 가져 오려면 ASPxGridView.GetRowValues 메서드를 사용하십시오. FocusedRowIndex과 열의 열 이름을 전달한 다음 원하는 유형으로 변환하십시오.

string C = ASPxGridView.GetRowValues(ASPxGridView.FocusedRowIndex, "C") as string;