2011-05-05 6 views
0

코드 뒤에서 채워진 두 개의 gridview에 문제가 있습니다. 채우기 및 GridView1 자체 databind 잘 작동합니다. 그런 다음 GridView2를 채우고 바인딩하는 코드를 추가했지만 GridView1은 완전히 사라졌습니다. GridView2.DataBind()를 주석 처리하면 GridView1이 다시 나타납니다. 나는 무슨 일이 일어나고 있는지 해결할 수 없습니다.코드에서 두 번째 GridView를 바인딩 할 때 첫 번째 GridView가 사라집니다.

Incidentaly DropDownList 또는 CheckBoxList에 대해 GridView2를 변경하면 동일한 문제가 발생하지만 ListBox에 대해 GridView1을 변경하면 GridView1이 나타납니다.

protected void Page_Load(object sender, EventArgs e) 
{ 


    Int32 chaID = 20; 
    Int32 slots = 14; 

    String ConnectionString = WebConfigurationManager.ConnectionStrings["horizonConnectionString"].ToString(); 
    String selectSQL = "SELECT chassis.ChassisName, srv.ChassisPosition, srv.ServerName, srv.ChassisID, srv.LocationID, chassis.LocationID AS ChaLocationID FROM srv INNER JOIN chassis ON srv.ChassisID = chassis.ChassisID WHERE (srv.ChassisID = '" + chaID + "') ORDER BY chassis.ChassisName, srv.ChassisPosition"; 
    SqlConnection con = new SqlConnection(ConnectionString); 
    SqlCommand cmd = new SqlCommand(selectSQL, con); 
    DataTable dt2 = new DataTable(); 
    DataView dv = new DataView(); 

    try 
    { 
     con.Open(); 

     SqlDataAdapter sda = new SqlDataAdapter(selectSQL, con); 
     sda.Fill(dt2); 
     dv = dt2.DefaultView; 


    } 
    catch (Exception) 
    { 

    } 


    try 
    { 

     int searchIndex; 
     dv.Sort = "ChassisPosition"; 

     DataTable dt = new DataTable(); 
     dt.Columns.Add(new DataColumn("Bay", typeof(Int32))); 
     dt.Columns.Add(new DataColumn("Server", typeof(String))); 

     for (int i = 0; i <= slots - 1; i++) 
     { 
      DataRow dr = dt.NewRow(); 
      dr[0] = i + 1; 

      searchIndex = dv.Find(i + 1); 

      if (searchIndex != -1) 
      { 
       dr[1] = dv[searchIndex][2].ToString(); 
      } 
      else 
      { 
       dr[1] = "-----"; 

      } 

      dt.Rows.Add(dr); 
     } 

     this.GridView1.DataSource = dt; 
     GridView1.DataBind(); 


    } 
    catch (Exception) 
    { 

    } 


     ConnectionString = WebConfigurationManager.ConnectionStrings["horizonConnectionString"].ToString(); 

     selectSQL = "SELECT [ServerName], [ServerID], [FarmName], [LMG] FROM [srv] ORDER BY [ServerName]"; 
     con = new SqlConnection(ConnectionString); 
     cmd = new SqlCommand(selectSQL, con); 
     DataTable dt3 = new DataTable(); 


     try 
     { 
      con.Open(); 

      SqlDataAdapter sda = new SqlDataAdapter(selectSQL, con); 
      sda.Fill(dt3); 

      this.GridView2.DataSource = dt3; 
      GridView2.DataBind(); 


     } 
     catch (Exception) 
     { 

     } 

    } 
+1

일부 컨트롤을 바인딩하면 레이아웃 문제가 있음을 나타내는 이유가 없습니다. 질문을 편집하고 aspx 파일에서 마크 업을 추가하는 것이 좋습니다. 그리드 2에 데이터가 있고 그리하여 크기가있을 때 그리드 1을 덮고 있거나 그렇지 않아야 할 가능성이 있습니다. – slugster

+0

페이지로드 이벤트에 중단 점을 넣고 데이터 소스 (GV1 및 GV2의 데이터 테이블)를 추적하고 데이터가 비어 있거나 데이터가 있는지 또는 일부 오류가 발생하고 예외가 발생하지만 사용자가 'try 그리고 그것을 잡을 수 없다. –

답변

0

당신은 같은 시간에 두 개의 연결을 SqlDataAdapter를의 동일한 인스턴스를 사용하고 있습니다.

SqlConnection con = new SqlConnection(ConnectionString); 
SqlCommand cmd = new SqlCommand(selectSQL, con); 

SqlDataAdapter를 객체 "를 Page_Load"방법에 두 번 "SDA" 선정됐다.

SqlDataAdapter sda = new SqlDataAdapter(selectSQL, con); 

SqlDataAdapter "sda"는 이미 GridView1에 바인딩되어 있습니다. U가이 객체를 변경하거나 재 할당하면이 데이터 바인딩이 손실됩니다.

+0

두 번째 SqlDataAdapter의 이름이 변경되었지만 여전히 동일한 작업을 수행합니다. 나는 또한 표준 SqlDataSource를 사용하여 코드에서 수행하는 대신 두 번째 GridView에 바인딩하려고했지만 그 역시 동일했다 (그리고 GridView2는 24 개의 레코드 이후에 멈추고 페이지를 벗어나는 것처럼 보이는 모든 레코드를 표시하지 않는다). – RickBowden

관련 문제