ASP.NET DROPDOWN 목록 목록 - 액세스 연속 양식과 유사합니다.
-
11-09-2019 - |
문제
내가 찾고있는 것은 asp.net 내에서 MS 액세스 스타일 연속 양식을 모방하는 방법입니다. 특정한 경우, 나는 데이터 소스 내의 값에 결합 된 각 행에 대한 드롭 다운 목록을 반환하는 데이터 소스에 바인딩 된 컨트롤을 원합니다. DropDownLists의 모든 변경 사항은 데이터베이스에 대한 업데이트를 즉시 수행합니다.
DropdownList.SelectedValue가 리피터에 할당되어있는 리피터 컨트롤을 사용하여이를 달성하는 데 중간 쯤에 있습니다.
그러나 이제 DropdownList에 OnSelectedEdexChanged 이벤트를 추가한다고 가정합니다. 그런 다음 리피터를 어떻게 쿼리하여 내가 어떤 행을 켜 있는지 (예를 들어 기본 키 값을 얻기 위해)
나는 이것이 쉽게 할 수 있을지 확신하지 못한다 .. 그래서 질문은 내가 실제로 무엇을해야합니까? 편집 할 행을 선택 해야하는 GridView를 사용하고 싶지 않습니다. 업데이트에 대한 DropdownLists AutoPostBack을 사용하고 싶습니다.
분명해?!
건배! :디
해결책
예를 들어, 우리가 불리는 사용자 정의 클래스에 구속력이 있다고 가정 해 봅시다 Record
public class Record
{
public int Id;
public string Value;
}
리피터에 사용자 정의 로직을 넣는 경우, 이벤트가 이벤트를 드롭 다운 목록의 ID에 기본 키를 첨부 할 수 있습니다.
protected void Repeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (!(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem))
return;
var dataItem = e.Item.DataItem as Record;
if (dataItem == null) return;
var dropdown = e.Item.FindControl("myDropDown") as DropDownList;
if (dropdown == null) return;
dropdown.ID = dropdown.ID + dataItem.Id;
}
그런 다음 선택한 indexChange에서 이벤트를 해고 한 드롭 다운의 ID를 빼낼 수 있습니다.
protected void SelectedIndexChanged(object sender, EventArgs e)
{
var dropdown = sender as DropDownList;
if (dropdown == null) return;
var stringId = dropdown.ID.Replace("myDropDown", "");
int id;
if (Int32.TryParse(stringId, out id))
{
updateRecord(id, dropdown.SelectedValue);
}
}
그것은 매우 추악한 해킹이지만 원하는 것을 할 수 있어야합니다.
다른 팁
이 문제를 해결하는 가장 쉬운 방법은 Access Continuous Form ASP.NET 스타일을 모방하는 것입니다. 행 수준의 UI를 처리하기 위해 USERCONTROL을 만들어 낸 다음 USERCONTROL을 리피터에 넣는 것입니다.