Click here to Skip to main content
15,890,845 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I have a gridview.I want to display QUERY RESULT in gridview header (columns) dynamically.Header shows based on SQL-QUERY. Here is my SQL-QUERY USE db_compiler SELECT Column_Name FROM tbl_field WHERE Table_Name='pak' For example it this return rows id,name,city then i want to these shows in gridview header. How can i do this

What I have tried:

ASPX
ASP.NET
<asp:Content ID="Content2" ContentPlaceHolderID="body" Runat="Server">
    <form id="form"  runat="server">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" 
            onrowdatabound="GridView1_RowDataBound">
        </asp:GridView>
        <asp:Button ID="Button1" runat="server" OnClick="load" Text="Button" />
    </form>
</asp:Content>

ASPX.CS
C#
 public void load(object sender, EventArgs e)
    {
        //string tbl_name = Session["value"].ToString();
        //string tbl_name = "new";
        string query = "USE db_compiler SELECT Column_Name FROM tbl_field WHERE Table_Name='pak'";
        SqlCommand cmd = new SqlCommand(query, cnn);
        DataTable dt = new DataTable();
        SqlDataAdapter adp = new SqlDataAdapter(cmd);
        DataTable table = new DataTable();
        cnn.Open();
        cmd.ExecuteNonQuery();
        adp.Fill(dt);
        for (int i = 0; i < query.Count(); i++)
        {
            DataColumn dc = new DataColumn(dt.Rows[i].ToString());
        }
      DataRow r = table.NewRow();
      GridView1.DataSource = table;
      GridView1.DataBind();
      cnn.Close();
}

It's giving me error
A column named 'System.Data.DataRow' already belongs to this DataTable.
Posted
Updated 17-Jun-16 0:36am

From what I understood, you want your gridview headers to be changed according to data that will be bind to to it.

Code Behind
C#
 string query = "USE db_compiler SELECT Column_Name FROM tbl_field WHERE Table_Name='pak'";
SqlCommand cmd = new SqlCommand(query, cnn);
DataTable dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);

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

ASPX
ASP.NET
<form  runat="server">
    <asp:gridview id="GridView1" runat="server" autogeneratecolumns="true">
    </asp:gridview>
</form>


Simply by doing this, whatever columns your query returns will be displayed as grid headers.
 
Share this answer
 
v2
Comments
Sinisa Hajnal 17-Jun-16 6:30am    
This would be true if his query doesn't return the values he needs to put into column as rows.
Hameed Khan 17-Jun-16 6:35am    
Please check my comment
Hameed Khan 17-Jun-16 6:35am    
Hi.Your provided answer give my this result img But i want output in this shape img and here is my sql table SQL-IMG
Member 12586674 17-Jun-16 6:37am    
Not able to view the image
Hameed Khan 17-Jun-16 6:41am    
I want this type of output http://i.imgur.com/6vlVo3I.jpg and here is my SQL image http://imgur.com/DtIsha8
You have several obvious errors in the code.
1. your query is of type string so this line
C#
for (int i = 0; i < query.Count(); i++)

will loop for each character in the query. You need dt.rows.count here.
2. you create new column
C#
DataColumn dc = new DataColumn(dt.Rows[i].ToString());

but you don't specify the item to be read. You call ToString on the whole row which by default gives back the type (System.Data.DataRow) which you set as column name.
3. you are not adding that column into datatable.
This should be your final code:
C#
public void load(object sender, EventArgs e)
    {
        string query = "USE db_compiler SELECT Column_Name FROM tbl_field WHERE Table_Name='pak'";
        SqlCommand cmd = new SqlCommand(query, cnn);
        DataTable dt = new DataTable();
        SqlDataAdapter adp = new SqlDataAdapter(cmd);
        DataTable table = new DataTable();
        cnn.Open();
        cmd.ExecuteNonQuery();
        adp.Fill(dt);

        for (int i = 0; i < dt.Rows.Count(); i++)
        {
            DataColumn dc = new DataColumn(dt.Rows[i].Item["Column_Name "].ToString());
dt.Columns.Add(dc);
        }
      DataRow r = table.NewRow();
      GridView1.DataSource = table;
      GridView1.DataBind();
      cnn.Close();
}
 
Share this answer
 
v4
Comments
Sinisa Hajnal 17-Jun-16 6:41am    
Just to comment on my own solution. I copied the function from above, you should add try..catch..finally block to a) catch errors if/when they happen and b) to dispose command and connection objects.
Hameed Khan 17-Jun-16 8:07am    
Hi..Thanks alot good effort.Your solution give me this output IMG BUT i want little bit different .Here is IMG
Member 14108928 26-Jan-20 11:29am    
hameed khan can u post code

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900