在代码中绑定第二个GridView时,第一个GridView消失

时间:2011-05-05 08:08:48

标签: c# asp.net

我遇到了几个从后面的代码中填充的网格视图的问题。 当我自己填充并数据绑定GridView1时,它工作正常。 然后我添加了代码来填充和绑定GridView2,它显示但GridView1完全消失。 如果我注释掉GridView2.DataBind(),那么GridView1会再次出现。 我无法弄清楚发生了什么。

事件上,如果我为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 个答案:

答案 0 :(得分: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更改或重新分配此对象,则此数据绑定将丢失。