2017-10-10 8 views
1

ObjectDataSource에 전달할 값으로 SelectedItem.Text 드롭 다운 목록을 사용하면이 오류가 발생합니다. 여기 또한, 나는 동적으로 Select Class 텍스트를 드롭 다운리스트를 추가 마크 업DataBinding : 'System.String'에 'Text'라는 이름의 속성이 없습니다.

<asp:ObjectDataSource ID="odsInsert" runat="server" SelectMethod="GetStudentInClass2" TypeName="MIHE_MIS.DALS.MidTermExamResultDAL"> 
       <SelectParameters> 
        <asp:ControlParameter DefaultValue="" ControlID="ddlClasses" Name="classCode" PropertyName="SelectedItem.Text" Type="String" /> 
        <asp:ControlParameter ControlID="ddlSemesters" Name="semesterID" PropertyName="SelectedValue" Type="Int32" /> 
        <asp:ControlParameter ControlID="ddlSpecialization" Name="specializationID" PropertyName="SelectedValue" Type="Int32" /> 
       </SelectParameters> 
      </asp:ObjectDataSource> 

입니다. 당신이 semesterID을위한 마크 업을 보면

protected void ddlClasses_DataBound(object sender, EventArgs e) 
     { 
      ListItem list = new ListItem("Select Class", "-1"); 
      this.ddlClasses.Items.Insert(0, list); 
     } 
+0

'PropertyName'은 속성이 아닌'Text'이어야합니다. 바인더 하위 속성을 이해하지 못합니다 – DiskJunky

+0

드롭 다운 목록의 값으로 정수 인 ClassID가 있습니다 –

+0

잘못 입력했습니다. 실제로 그것은 SelectedItem.Text입니다. –

답변

0

, 그것은 Int32 될 것으로 예상된다 SelectedValue에 결합하는 것. 이제 classCode의 마크 업을 보면 동일한 객체에서 SelectedValue.Text에 바인딩됩니다. 우리는 첫 번째 인스턴스에서 이라는 속성이없는 Int32SelectedValue임을 알고 있습니다. 올바른 개체 및 속성 유형에 바인딩을 수정해야합니다.

위의 코드에 따르면 ObjectDataSourceSelectedItem.Text에서 텍스트를 선택할 수 없습니다. 이 문제를 해결하려면 ObjectDataSourceSelecting 이벤트로 수정해야합니다.

<asp:ObjectDataSource ID="odsInsert" runat="server" SelectMethod="GetStudentInClass2" 
         TypeName="MIHE_MIS.DALS.MidTermExamResultDAL" 
         OnSelecting="odsInsert_Selecting"> 
    <SelectParameters> 
     <asp:Parameter Name="classCode" Type="String" /> 
     <asp:ControlParameter ControlID="ddlSemesters" Name="semesterID" PropertyName="SelectedValue" Type="Int32" /> 
     <asp:ControlParameter ControlID="ddlSpecialization" Name="specializationID" PropertyName="SelectedValue" Type="Int32" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

그러면 코드 뒤에 이벤트가 선언됩니다.

protected void odsInsert_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) 
{ 
    e.InputParameters["classCode"] = ddlClasses.SelectedItem.Text; 
} 
+0

이어야합니다. 잘못 입력 했었습니다. 내 질문 업데이트 –

+0

오류가 사라졌지만 문제가 여전히 존재합니다. 데이터가 없기 때문에 SelectedItem.Text는 SelectedItem.Text를 가져올 수 없습니다. –

+0

'ObjectDataSource'의'Selecting' 이벤트에 연결하여 프로그래밍 방식으로 매개 변수를 제공해야합니다. 필요한 방식으로 직접 바인딩 할 수는 없습니다. – DiskJunky