runat = 서버 컨테이너 내부의 GridView/ObjectDatasource
-
05-07-2019 - |
문제
라디오 버튼 2 개가있는 작은 웹 양식이 있습니다. PoetfromList 및 Entervalue라고 부릅니다. PickfromList가 확인되면 ObjectDatasource에 바인딩하도록 구성된 GridView를 표시하고 싶습니다. Entervalue가 확인되면 GridView가 사라지기를 원합니다.
이 양식은 테이블을 사용하여 배치되며 적절한 데이터 및 사용자 입력에 따라 적절한 행을 숨기거나 표시하려고합니다.
불행히도 TrPickFromList2 행이 ID와 runat = "Server"속성을 지정할 때 GridView가 바인딩되지 않습니다. trpickfromlist2 행에서 id와 runat = "server"를 제거하면 성공적으로 바인딩됩니다.
어떤 아이디어?
<table id="tblOptions" runat="server">
<tr id="trPickFromList1" runat="server">
<td>
<asp:RadioButton ID="rbFromList" runat="server" GroupName="Selection"
Text="Get Data From Existing Item" AutoPostBack="True"
oncheckedchanged="rbromList_CheckedChanged" />
</td>
</tr>
<tr id="trPickFromList2" runat="server">
<td style="padding-left:20px">
<asp:GridView ID="gvList" runat="server" AutoGenerateColumns="False"
DataSourceID="odsList" Width="400px" onrowdatabound="gvList_RowDataBound">
<Columns>
...
</Columns>
</asp:GridView>
</td>
</tr>
<tr id="trEnterValue1" runat="server">
<td>
<asp:RadioButton ID="rbEnterValue" runat="server" GroupName="Selection"
Text="Create a New Item"
AutoPostBack="True"
oncheckedchanged="rbEntered_CheckedChanged" />
...
해결책
왜 JavaScript로 TRS를 보여 주거나 숨기지 않습니까? 그렇게하면이 문제가 없으며 훨씬 더 반응이 좋은 UI가 있습니다.
jQuery와 함께 :
$ ( '. classOnshowradiobutton'). 클릭 (function () {$ ( '. trtoshow'). show (); $ ( '. trtohide'). hide ();});
그런 다음 분명히 다른 라디오 버튼을 반대로 수행하십시오.
다른 팁
나는 결국 구현했다 Wilco Bauwer의 Rowselectorfield 컨트롤 이 문제를 해결하기 위해. 컨트롤이 선택한 데이터 키 값이 아닌 선택된 행의 인덱스 값을 표면한다는 점에서 완벽한 솔루션은 아닙니다. 그러나 잘 작동했습니다.
흠 .. 확실하지 않지만 몇 번이나 나를 얻은 것은 autowireevents가 거짓으로 설정되어 있고, <% page /%> 섹션의 상단에 있습니다. 도움이되지 않으면 죄송합니다. 그러나 그와 같은 성가신 일은 문제입니다.
Autowireevents 답변이 제안 된 경우 Joe가 문제가되지 않으면 TR 태그에서 Runat = 서버를 제거하고 대신 자리 표시 자로 감싸고 자리 표시자를 사용하여 가시성을 제어 할 수도 있습니다. (유효하지 않은 HTML을 초래하므로 패널을 사용하지 마십시오).
나 같은 행동을 발견했습니다 runat = "Server"가있는 tr 태그 내부에 양식 뷰가 있습니다.
레이아웃에 테이블을 사용하는 특별한 이유가 있습니까? 모든 컨트롤을 테이블에서 꺼내고 라디오 버튼을 실제 GridView를 볼 수있게 만들 수 있도록하십시오.