2013-05-30 1 views
0

다음은 퍼즐입니다. 마스터 페이지의 데이터 소스는 (그랜드)은 하위 페이지에 텍스트를 포함하는 라벨 제어의 SelectParameter위한 의미 :ASP 마스터 페이지 : 하위 페이지의 값을 마스터 페이지의 SqlDataSource 매개 변수에 전달하는 방법

<asp:SqlDataSource ... SelectCommand="SELECT * FROM [tblMyTable] WHERE (([strField] = ?) "> 
      <SelectParameters> 
       <asp:ControlParameter Name="strField" ControlID="cphMaster$cphChild$lblGrandchild" propertyname="Text" DbType="String"/> 
      </SelectParameters> 
     </asp:SqlDataSource> 

그러나 이것은 에러 ("System.Data.OleDb.OleDbException 생성 데이터 타입 불일치 ").

나는 strField가 실제로 문자열인지, ContentPlaceHolder (cph) 컨트롤이 해당 ID로 올바르게 식별되는지 확인했습니다. 어떤 아이디어?

그리고 'ControlParameter가 ContentPlaceholder (s)에있는 컨트롤을 읽는'방식으로 SelectParameter에 값을 전달하는 합리적인 방법이 무엇입니까?

+0

나는 당신이하고 싶은 것을 할 수 있다고 확신합니다. 하지만 디자인에 문제가있을 수 있다고 생각합니다. 마스터 페이지의 특정 페이지에 나타나는 특정 작업을 수행하는 이유는 무엇입니까? 모든 페이지에 적용되지 않으면 마스터 페이지에 없어야합니다. 원하는 기능이 있다면 직접 페이지 클래스를 확장 한 다음 다른 페이지에도 사용할 수 있습니다. 그런 다음 레이아웃, 모양 및 느낌에 대한 마스터 페이지를 가질 수 있습니다. – uriDium

+0

@uriDium 당신은이 질문을하는 것이 옳은데, 사실이 유형의 솔루션에 대한 진정한 필요성이 있습니다. 각기 다른 기준의 결과 (일반적인 목록보기 디자인에서)를 사용하는 약 40 개의 방문 페이지가 각 페이지의 개별 요소 - 제목, 텍스트, 이미지 등)와 중첩 된 마스터 페이지에 표현 된 많은 공통 요소 (배너, 꼬리말 및 목록보기) – htchmn

답변

0

자식 페이지에 액세스 할 수있는 마스터 페이지 클래스에 SQLDataSource 유형의 공용 속성을 만들 것을 제안합니다.

YourMasterPage.vb

Private _mastersqldatasource as SqlDataSource 
Public ReadOnly Property MasterSQLDataSource() As SqlDataSource 
     Get 
      Return SqlDataSource1 
     End Get 
End Property 

그럼 당신은 내가 이것을 사용하는 데 사용이 도움이 귀하의 자녀 페이지로

dim myMasterPage as YourMasterPage 
myMasterPage = DirectCast(Me.Page.Master, YourMasterPage) 
myMasterPage.MasterSQLDataSource.SelectParameters("strField").DefaultValue = lblGrandChild.Text 

희망을 액세스 할 수 있습니다 (마스터 페이지의 클래스 이름은 YourMasterPage입니다) 귀하의 케이스를위한 방법

+0

귀하의 솔루션에 대한 감사와 찬사가 효과적입니다. 나는 네가 더 평범한 접근법이라고 생각한다. 내 코드는 적지 만 내 서클에서는 배포/유지 관리가 조금 더 쉬울 수도 있습니다. – htchmn

0

하위 페이지 .cs 파일에서 다음 코드를 사용할 수 있습니다.

SqlDataSource ds = this.MasterPage.FindControl("datasourceid"); 
// now you can custimize this ds according to your problem 
0

내 방법이 좋습니다. 실제 응용 프로그램에는 몇 가지 기준이 있으며 SelectParameters가 WHERE 절의 기준과 동일한 순서가 아니 었습니다. 순서가 동일하면이 방법이 작동합니다.

그래서 :

SELECT * FROM [myTable] WHERE [FieldA] = ? AND [FieldB] = ? AND [FieldC] = ? 

요구 :

<SelectParameters> 
     <asp:ControlParameter Name="FieldA" ControlID="cphMaster$cphChild$lblGrandChildA .../> 
     <asp:ControlParameter Name="FieldB" ControlID="cphMaster$cphChild$lblGrandChildB .../> 
     <asp:ControlParameter Name="FieldC" ControlID="cphMaster$cphChild$lblGrandChildC .../> 
    </SelectParameters> 

즉,하지 ACB 등 내가 전에이 동작을 건너 적이 마스터/하위에서 발생할 수 (/ 손자) 구조. 희망이 다른 사람들을 돕는다.

0

축하합니다. 문제를 해결할 수있는 것으로 보입니다. 사용자가 다양한 브라우저 (예 : IE, Firefox, Chrome, Safari)를 사용할 수 있도록 허용 한 경우 당신은 단지 사용자가 하나의 브라우저를 사용하도록 허용하는 경우 당신은 다음 것, cphMaster_cphChild_lblGrandChildA을 밑줄로 렌더링 몇 가지 브라우저에서 cphMaster$cphChild$lblGrandChildA이 같은이 제어 ID를 생성 여부를 확인해야하지만 수도 문제가되지 마라.

관련 문제