문제

내가 찾고있는 것은 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을 리피터에 넣는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top