GridView에서 행을 편집 할 때 사용 가능한 값 목록이 행의 다른 열에 종속적 인 DropDownList가 필요합니다 ("type" 지금은 기록 중); 즉, 편집중인 행에 따라 다른 옵션이 나열됩니다.다른 열 값에 따라 GridView EditItemTemplate에 DropDownList를 채우는 방법
다른 방법으로 불필요한 DataKeyName을 GridView에 추가하여 멋지게 만들었지 만, 다른 곳에서 슬픔을 느끼게하고 어쨌든 너무 간결하다고 느끼기 때문에 더 나은 방법을 찾고 있습니다. 에서 .aspx 파일에서
: 여기에 내가 현재 그것을하고있어 방법
<asp:GridView ID="gvDct" ... DataKeyNames="dctId,dctType" ... >
...
<asp:TemplateField>
...
<EditItemTemplate>
<asp:DropDownList ID="ddlDctParent" runat="server"
DataSourceId="sdsDctParent"
DataValueField="dctId" DataTextField="dctFullPath"
SelectedValue='<%# Bind("dctParentId") %>'
... >
</asp:DropDownList>
<asp:SqlDataSource ID="sdsDctParent" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
OnSelecting="sdsDctParent_Selecting"
SelectCommand="SELECT dctId, dctFullPath FROM lkpDocCatAndType
WHERE [email protected]">
<SelectParameters>
<asp:Parameter Name="dctType" />
</SelectParameters>
</asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
...
</asp:GridView>
나는 컨트롤의 controlid = "gvDct"와 ControlParameter가되도록 SelectParameter를 원하고 PROPERTYNAME = "SelectedDataKey.Values [dctType]" , 그러나 작동하지 않는 알 수없는 이유로 (매개 변수 값이 null),이 비트를 .vb 코드 숨김 파일에 추가하여 DropDownList의 데이터 소스에 대한 행 특정 매개 변수를 채 웁니다.
Protected Sub sdsDctParent_Selecting(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs)
e.Command.Parameters(0).Value = gvDct.DataKeys(gvDct.EditIndex).Item(1)
End Sub
그래서 GridView에서 행 편집을 시작하면 DropDownL ist가 바인딩되면 SqlDataSource SelectCommand가 실행되어 OnSelecting 코드가 실행되어 DropDownList에 적절한 값 채우기를 얻을 수 있도록 편집중인 행 (EditIndex)에서 매개 변수 값을 제공합니다.
"더 나은"방법이 있습니까? 나를 위해 가장 중요한 측면은 GridView에서 행을 삭제하는 데 사용하는 저장 프로 시저에 너무 많은 매개 변수 문제를 일으키기 때문에 DataKeyName을 추가하지 않는 것입니다.
같은 일을 위의 코드가 SQL 주입하는 경향이 아닌가요 시도 할 수 있습니다? – bonCodigo