Hameed Khan Ответов: 2

Как добавить столбцы заголовка в gridview на основе SQL-запроса ? ASP.NET с#


У меня есть gridview.Я хочу динамически отображать результат запроса в заголовке gridview (столбцы).Заголовок отображается на основе SQL-запроса. Вот мой SQL-запрос 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. Как я могу это сделать

Что я уже пробовал:

Aspx-файл
<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
 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();
}

Это дает мне ошибку
A column named 'System.Data.DataRow' already belongs to this DataTable.

2 Ответов

Рейтинг:
2

Member 12586674

Из того, что я понял, вы хотите, чтобы ваши заголовки gridview были изменены в соответствии с данными, которые будут привязаны к нему.

с фоновым кодом

 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-файл
<form  runat="server">
    <asp:gridview id="GridView1" runat="server" autogeneratecolumns="true">
    </asp:gridview>
</form>


Просто сделав это, все столбцы, возвращаемые вашим запросом, будут отображаться в виде заголовков сетки.


Sinisa Hajnal

Это было бы верно, если бы его запрос не возвращал значения, которые он должен поместить в столбец в виде строк.

Hameed Khan

Пожалуйста, проверьте мой комментарий

Hameed Khan

Привет.Ваш предоставленный ответ дает мне этот результат НВФ Но я хочу получить результат в такой форме НВФ а вот и моя sql таблица SQL-IMG

Member 12586674

Не удается просмотреть изображение

Hameed Khan

Я хочу этот тип вывода http://i.imgur.com/6vlVo3I.jpg а вот и мой SQL образ http://imgur.com/DtIsha8

Hameed Khan

Но ваше решение результат дайте мне это НВФ

Hameed Khan

Я хочу этот тип вывода НВФ а вот и мой SQL образ SQL-IMG

Рейтинг:
0

Sinisa Hajnal

У вас есть несколько очевидных ошибок в коде.
1. Ваш запрос имеет тип string, поэтому эта строка

for (int i = 0; i < query.Count(); i++)

будет цикл для каждого символа в запросе. Вам нужно dt.rows.count здесь.
2. вы создаете новый столбец
DataColumn dc = new DataColumn(dt.Rows[i].ToString());

но вы не указываете пункт, который нужно прочитать. Вы вызываете ToString для всей строки, которая по умолчанию возвращает тип (System.Data.DataRow), заданный в качестве имени столбца.
3. Вы не добавляете этот столбец в datatable.
Это должен быть ваш окончательный код:
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();
}


Sinisa Hajnal

Просто прокомментирую свое собственное решение. Я скопировал функцию сверху, вы должны добавить try..catch..finally block, Чтобы а) ловить ошибки, если/когда они случаются, и Б) утилизировать объекты команд и соединений.

Hameed Khan

Привет...большое спасибо за хорошие усилия.Ваше решение дает мне этот вывод НВФ Но я хочу немного другого .Вот НВФ

Member 14108928

Хамид Хан может у почтовый индекс