在后面的代码中创建多个网格视图

时间:2010-11-15 17:55:57

标签: c# asp.net gridview visual-studio-2008

这很有意思..

我希望在面板中有多个网格视图。并且gridview的数量不固定..

所以基本上我认为.aspx页面中应该没有代码,因为我必须在代码隐藏中创建gridview。

我在一个面板中有1个gridview的代码..我在HTML页面中定义了网格视图,并从后面的代码中填充它。

这是代码..可以任何1请帮我多个网格视图...

这是在.aspx页面上

       <asp:GridView ID="GridView1" runat="server"  AutoGenerateColumns="False" 
      AllowSorting="True" CellSpacing="2" onsorting="GridView1_Sorting"
                    Width="100%" ForeColor="White" GridLines="None" 
                      ondatabound="GridView1_DataBound1">

       <Columns>
                            <EditItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("PolicyID") %>'></asp:Label>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("PolicyID") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
      </Columns>
    </asp:GridView>

这是背后的代码

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dt = new DataTable();
            SqlConnection connection = new SqlConnection(Session["ConnectionStringSQL"].ToString()); 
            connection.Open();
            SqlCommand sqlCmd = new SqlCommand("SELECT Policies.PolicyID, FROM Policies", connection);
            SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

            sqlDa.Fill(dt);
            connection.Close();

            if (dt.Rows.Count > 0)
            {
                for (int j = 0; j < dt.Rows.Count; j++)
                {
                    policyID.Add(dt.Rows[j]["PolicyID"].ToString());

                }
                taskTable.Columns.Add("PolicyID");


                if (policyID.Count != 0)
                {
                    for (int k = 0; k < policyID.Count; k++)
                    {
                        DataRow tableRow = taskTable.NewRow();

                        tableRow["PolicyID"] = policyID[k];

                        taskTable.Rows.Add(tableRow);
                    }

                    Session["TaskTable"] = taskTable;

                    GridView1.DataSource = Session["TaskTable"];
                    GridView1.DataBind();
                }
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

未经测试,但此类事情应该这样做:

for (int i=0;i<5;i++) {
   GridView gv = new GridView();
   gv.DataSource = datasources[i];
   Page.Controls.Add(gv);
}
Page.DataBind();

答案 1 :(得分:2)

答案1可以正常工作但是如果你将它嵌套在母版页等中则要小心。因为当你直接绑定到PAGE时,你似乎无法将它实际放在你的表单标签中。

我有一个sproc,返回我想要转储到页面的未知数量的不同表,所以我把一个占位符放在aspx页面上

然后通过我的数据集

使用循环
foreach (DataTable table in ds.Tables)
{
    GridView gv = new GridView();
    gv.DataSource = table;
    gvPlaceHolder.Controls.Add(gv);
}

.....或....

for (int i = 0; i < ds.Tables.Count; i++)
{
           GridView gv = new GridView();
            gv.DataSource = ds.Tables[i];

            gvPlaceHolder.Controls.Add(gv);
}

..然后绑定到占位符,以便表格在我的子页面内的表单内部结束,这是在我的母版页内

                gvPlaceHolder.DataBind();

答案 2 :(得分:0)

        DataSet ds = new DataSet();
        ds = obj.GetMedicalGridWithAge(MphID, ProductCode);
        if(ds.Tables.Count > 0)
        {
            if (ds.Tables[1].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables.Count; i++)
                {

                    GridView gv = new GridView();
                    gv.ID = "gv" + (i + 1);
                    
                    gv.DataSource = ds.Tables[i];
                    gv.DataBind();
                    Panel1.Controls.Add(gv);
                    Label newLine = new Label(); newLine.Text = "<br/>";
                    Panel1.Controls.Add(newLine);

                }
            }
            else
            {
                GridView gv = new GridView();
                gv.ID = "gv" ;

                gv.DataSource = null;`
                gv.DataBind();
                Panel1.Controls.Add(gv);
            }
           
        }