设置自动生成时,在运行时访问Gridview中的数据?

时间:2012-07-23 11:02:43

标签: c# asp.net

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

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

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)

3 个答案:

答案 0 :(得分:1)

检查另一个SO帖子answer上的Why column count is 0 for GridView,了解您为什么无法访问网格列集合中的列。

在我看来,如果您想使用自动生成的列,请按照此ASP.net论坛链接 - Customizing Auto Generated Columns (GridView)和SO帖子How to hide columns in an ASP.NET GridView with auto-generated columns?

e.g。 从这段代码中有一个想法..我还没有检查其中的正确语法等。

 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;
        }
    }
} 

//实现此方法的另一种最简单的方法如下:来自Question Text

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; }
    }

答案 1 :(得分: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();

答案 2 :(得分:0)

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