3

我将我的数据从 Excel 工作表导入到网格视图。之后,我想将我的网格视图的列标题文本放入下拉列表中,但我无法访问它们,请帮助我 :-( ;

这是我的代码,但它不起作用:

List<string> lst = new List<string>();
* for (int i = 0; i < dg_excel.Columns.Count; i++)
{
    lst.Add(dg_excel.Columns[i].HeaderText);
}
ddl_prd_count.DataSource;
ddl_prd_count.DataBind();

对于这一*行,它对我说没有列(column.count = 0)

4

3 回答 3

1

检查另一个 SO 线程上的答案Why column count is 0 for GridView以了解为什么您无法访问网格的 Columns 集合中的列。

在我看来,如果你想使用自动生成的列,那么请点击这个 ASP.net 论坛链接 -自定义自动生成的列 (GridView)和 SO 线程如何使用自动生成的列隐藏 ASP.NET GridView 中的列?.

例如,从这段代码中有一个想法。我没有检查其中的正确语法等。

 protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        if (IsFillCombo)
        {
            //fill your list here.
            for (int i = 0; i < datasourcetable.Columns.Count; i++)
            {
                lst.Add(e.Row.Cells[i].Text);
            }
            IsFillCombo = false;
        }
    }
} 

// 另一种最简单的实现方法如下:来自问题文本

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                List<Abc> listofAbc = new List<Abc>();
                for (int i = 0; i < 10; i++)
                {
                    listofAbc.Add(new Abc
                    {
                        ID = i + 1,
                        Name = "Abc" + (i + 1).ToString()
                    });
                }
                GridView1.DataSource = listofAbc;
                GridView1.DataBind();

                List<string> lst = new List<string>();

                for (int i = 0; i < GridView1.HeaderRow.Cells.Count; i++)
                {

                    lst.Add(GridView1.HeaderRow.Cells[i].Text);
                    System.Diagnostics.Debug.WriteLine(GridView1.HeaderRow.Cells[i].Text);
                }
            }
        }
    }
    public class Abc
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
于 2012-07-23T11:46:49.240 回答
1

您可以使用以下代码

List<string> lst = new List<string>();

for (int i = 0; i < dg_excel.HeaderRow.Cells.Count; i++)
{

    lst.Add(dg_excel.HeaderRow.Cells[i].Text);

}

ddl_prd_count.DataSource=lst ;

ddl_prd_count.DataBind();
于 2012-07-23T11:56:09.867 回答
0

访问gridView1_CellValueChanged您的网格的事件,然后访问e.Column.FieldName.ToString()

于 2012-07-23T12:33:15.883 回答