简体   繁体   English

如何将ListBox中的项目作为GridView的标题

[英]How do I make items in the ListBox as headers of GridView

I have a ListBox , on_button click, I want all the items in the ListBox to be displayed as headers in the GridView . 我有一个ListBox ,on_button单击,我希望ListBox中的所有项目在GridView显示为标题。 Here is the code that i have tried : 这是我尝试过的代码:

protected void DONE4_Click(object sender, EventArgs e)
    {
        Panel7.Visible = true;

        DataTable dt = new DataTable();
        for (int i = 0; i < ListBox1.Items.Count; i++)
        {
            dt.Columns.Add(ListBox1.Items[i].ToString());
        }
        GridView2.DataSource = dt;
        GridView2.DataBind();

        foreach (GridViewRow grdRow in GridView2.Rows)
        {
            DropDownList bind_dropdownlist = new DropDownList();                                                    // defining the property of the DropDownList as bind_dropdownlist
            bind_dropdownlist = (DropDownList)(GridView2.Rows[grdRow.RowIndex].Cells[0].FindControl("Pro_List"));   // finding the  DropDownList from the gridiew for binding
            SqlDataAdapter mydata = new SqlDataAdapter("SELECT DISTINCT Profile_Instance FROM Profile_Master", con);
            DataSet dset = new DataSet();                                                                           // binding the DropDownList with the dataset ds
            mydata.Fill(dset, "Table");
            bind_dropdownlist.DataSource = dset;
            bind_dropdownlist.DataTextField = "Profile_Instance";                                                   // set the DropDownList's DataTextField as designation which display the designation in the dropdownlist after fetching the data from database
            bind_dropdownlist.DataBind();
            bind_dropdownlist.Items.Insert(0, new ListItem("---Choose Profile---", "-1"));
        }
    }

I want all the items in the ListBox to be displayed as header field in a GridView . 我希望ListBox中的所有项目都显示为GridView标题字段。

The code above gives no errors, but when run it does not work. 上面的代码没有错误,但运行时它不起作用。 Can anyone kindly help me with this? 有人可以帮我这个吗?

Here is my Design code for the GridView : 这是GridView设计代码:

<asp:Panel ID="Panel7" runat="server">
        <asp:GridView ID="GridView2" runat="server" CellPadding="4" ForeColor="#333333" 
            GridLines="None" style="text-align: center; font-size: small">

            <Columns>
            <asp:TemplateField HeaderText="">
                <ItemTemplate>
                    <asp:DropDownList ID="Pro_List" runat="server">
                        <asp:ListItem>--Select--</asp:ListItem>                          
                    </asp:DropDownList>
                </ItemTemplate>
            </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </asp:Panel>

After setting the DataSource, Call the DataBind method and see what happens 设置DataSource后,调用DataBind方法并查看会发生什么

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

EDIT : The below code works just fine. 编辑:以下代码工作得很好。 Tested. 测试。

If you do not have data in the Grid, It wont show anything even the headers unless you give an EmptyText field property value for the grid. 如果Grid中没有数据,除非为网格提供EmptyText字段属性值,否则它甚至不显示任何标题。

DataTable dt = new DataTable();
DataRow rw = default(DataRow);
for (int i = 0; i < ListBox1.Items.Count; i++)
{
    dt.Columns.Add(ListBox1.Items[i].ToString(),
                                   System.Type.GetType("System.String"));             
}
//Simply adding 10 rows
//Replace this hard coded loop with your looping 
// over your data to add rows.
for (int j = 0; j < 10; j++)
{
    rw = dt.NewRow();
    for (int i = 0; i < ListBox1.Items.Count; i++)
    {
        rw[ListBox1.Items[i].ToString()] = "Hello there";
    }              
    dt.Rows.Add(rw);
}
GridView1.DataSource = dt;
GridView1.DataBind();

The working sample is available in this link . 链接提供了工作样本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM