如何在不知道任何字段的情况下填充 gridView

How to fill gridView wihtout actually knowing any of the fields

我有这个查询select distinct b.Name Project, a.Name Field from viewBatchClassIndexFields a inner join BatchDef b on a.DocumentBatchDefID = b.BatchDefID where b.Name = @projecto order by 1

它的作用是,获取项目名称,并由此获得 return 需要的索引字段,问题是几乎每个项目名称都作为 return 的不同索引字段,我的问题是。 我如何在事先不知道我将拥有哪些字段的情况下填充 gridView。

没有什么能阻止您让 gridview 自动为您生成列。事实上,如果你什么都不做,那就是默认的!!!

因此,我假设您使用了项目-> 设置,并设置了与数据库的有效连接。好的,现在我们将一个 gridview 放到网页上,这样说:

        <asp:GridView ID="GridView1" runat="server"></asp:GridView>

好的,现在,这是我们填充网格视图的代码:

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadGrid();
    }

    void LoadGrid()
    {
        // load up our grid
        using (SqlCommand cmdSQL = new SqlCommand("SELECT TOP 10 * from tblHotels ORDER BY HotelName ",
            new SqlConnection(Properties.Settings.Default.TEST4)))
        {
            cmdSQL.Connection.Open();
            GridView1.DataSource = cmdSQL.ExecuteReader();
            GridView1.DataBind();
        }
    }

所以,我没有在哪里指定任何列名。

输出:

因此,您可以 shove/use/have 在上面进行任何查询 - 网格将使用数据源中的列名。因此,您可以为该数据源使用任何数据源(任何 sql 查询 - 甚至是具有连接的查询)。

你当然也可以将查询结果加载到数据表中,然后当然循环列名,并将它们添加到gridview的列中,但是如果你不设置AutoGeneraateColumns = false(那么网格将自动为您生成列)。