2011-05-05 46 views
0

我遇到了一些从后面的代码填充的GridView问题。 当我自己填写和绑定GridView1时,它工作正常。 然后我添加了代码来填充和绑定GridView2,它完全显示了GridView1的消失。 如果我注释掉GridView2.DataBind(),那么GridView1会再次出现。 我无法弄清楚发生了什么事。第一个GridView在代码中绑定第二个GridView时消失了

如果我为DropDownList或CheckBoxList更改GridView2,则会出现同样的问题,但是如果我将其更改为ListBox,则会出现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文件中添加标记 - 当grid2有数据(因此有一些大小)时,它很可能覆盖了grid1或将它推到某个不应该有的地方。 – slugster 2011-05-05 08:31:14

+0

请在页面加载事件中放置一个断点,然后跟踪数据源(GV1和GV2的数据表),并告诉我它是空的还是有数据的,或者发生了一些错误并发生异常,但是因为您尝试并抓住你无法完全认出它。 – 2011-05-05 09:27:10

回答

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的名字,但它仍然做同样的事情。我也尝试使用绑定到第二个GridView的标准SqlDataSource,而不是在代码中执行它,但这也是一样的(并且GridView2不显示所有记录,它在24条记录后停止并且似乎离开页面)。 – RickBowden 2011-05-05 09:06:10

相关问题