2010-01-06 3 views
0

저는 ASP.NET에서 C# 콤보를 처음 접해 보았습니다. 그래서 제 설명과 함께 명확 해 지도록 노력할 것입니다.Gridview의 셀은 RowUpdating 이벤트에서 컨트롤을 잃습니다.

GridView를 사용하여 데이터베이스에있는 일부 열과 행을 표시하고 있습니다. 이것은 훌륭하게 작동합니다. 왜냐하면 나는 이름 목록에서 동적으로 열을 추가하기를 원했기 때문이다. 5 개의 이름을 가진 목록이 있다고 가정하면 GridView에있는 모든 이름의 열을 동적으로 만듭니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //Create columns for each student 
     List<Student> allStudents = new Eetlijst.Business.Students().GetAll(); 
     allStudents.Reverse(); 

     foreach (Student student in allStudents) 
     { 
      StudentBoundField studentField = new StudentBoundField(); 
      studentField.HeaderText = student.Naam; 
      MaaltijdGrid.Columns.Insert(4, studentField); 
     } 

     ShowDataInGrid(DateTime.Now.Month, DateTime.Now.Year); 

는 다른 물건있어 거기에 그것은 중요하지 않다 : 여기에 내가 무엇을 표시하는 일부 코드입니다. ShowDataInGrid는 다음과 같이 표시됩니다.

public void ShowDataInGrid(int maand, int jaar) 
{ 
    List<Maaltijd> allMaaltijden = new Eetlijst.Business.Maaltijden().GetByMonthAndYear(maand, jaar); 
    Session.Contents.Add("maaltijden", allMaaltijden); 

    MaaltijdGrid.DataSource = allMaaltijden; 
    MaaltijdGrid.DataBind(); 
} 

각 행에 대해 동적 열을 어떻게 만듭니 까? DataBound 이벤트를 사용하여 생성합니다. 따라서 GridView 데이터 바인딩시 열은 데이터로 채워집니다. 또한 행이 편집 모드에 있는지 여부를 확인하는 내부가 있습니다. 따라서 행 옆에있는 편집 버튼을 클릭하면 행이 편집 모드로 완벽하게 이동합니다. 내가 만든 코드는 TextBox 컨트롤을 셀에 추가합니다. 값을 입력하고 업데이트 버튼을 누르면 더 이상 컨트롤을 찾을 수 없으므로 입력 한 값을 가져올 수 없습니다. 컨트롤은 내가 거기에 중단 점을 넣을 때 여전히 DataBound에 있습니다. 그러나 Update 버튼을 클릭하자마자 셀의 모든 컨트롤이 사라집니다.

인터넷에서 검색 한 결과, RowUpdating 메소드에 도달하기 전에 다시 게시를 실행하는 응용 프로그램과 관련이 있다는 것을 발견했습니다.

그래서 어떻게하면 편집 모드에서 셀에 추가 한 컨트롤을 사용할 수 있습니까?

누군가 DataBound 이벤트 안에있는 코드를 필요로하면 게시 할 것입니다.

답변

1

컨트롤이 작동하는 방식 때문에 모든 페이지로드시 동적 컨트롤이나 열을 다시 만들어야합니다. 동적 컨트롤은 유지되지 않으므로 모든 페이지 포스트 백에 다시로드해야합니다. 그러나 이러한 컨트롤에 대한 viewstate 유지됩니다.

HTH.

0

이 함수를 호출합니다. ShowDataInGrid (DateTime.Now.Month, DateTime.Now.Year); 안에 있음

Page_Init 이벤트입니다.

컨트롤과 값도 얻을 수 있습니다.

관련 문제