【问题标题】:is it possible to read the column name of a cell in gridview?是否可以在gridview中读取单元格的列名?
【发布时间】:2010-11-14 00:20:26
【问题描述】:

我想在datagridview的以下事件中找到单元格的列名。

protected void grvDetailedStatus_ItemDataBound(object sender, DataGridItemEventArgs e)
{ 
    for (int i = 0; i <= e.Item.Cells.Count - 1; i++)
    {
        System.DateTime cellDate = default(System.DateTime);
        if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate))
        {
            e.Item.Cells[i].Text = string.Format("{0:d}", cellDate);
        }
    }
}

有没有办法找到我正在操作的单元格的列名?

编辑:很抱歉没有给出明确的解释。让我解释得更清楚。

我只想对特定列值进行以下格式化:

protected void grvDetailedStatus_ItemDataBound(object sender, DataGridItemEventArgs e)
{
  for (int i = 0; i <= e.Item.Cells.Count - 1; i++)
    {
        System.DateTime cellDate = default(System.DateTime);
        if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate))
        {
            e.Item.Cells[i].Text = string.Format("{0:d}", cellDate);

        }
    }
}

比如说,我只需要更改“column1”和“column5”的日期格式。所以现在我想知道列名,并且我想单独格式化该列并保留其余部分。

protected void grvDetailedStatus_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    if ( columnName == "Column1")
    {
        for (int i = 0; i <= e.Item.Cells.Count - 1; i++)
        {
            System.DateTime cellDate = default(System.DateTime);
            if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate))
            {
                e.Item.Cells[i].Text = string.Format("{0:d}", cellDate);
            }
        }
    }
}

.

【问题讨论】:

  • 您提到的 datagridview 让人们感到困惑。有两种风格:DataGrid 和 GridView。您正在使用 DataGrid。

标签: c# asp.net data-binding datagrid


【解决方案1】:

我假设您使用的是 DataGrid。 GridView 是一个类似的控件,但风格略有不同。我还假设您使用的是自动生成的列,在这种情况下,DataGrid.Columns 集合对您没有帮助。

与其每次检查列名,不如将您感兴趣的列的索引存储一次。像这样:

private List<int> _myColumns;

protected void grvDetailedStatus_ItemDataBound(object sender,
    DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Header)
    {
        _myColumns = new List<int>();

        for (int i = 0; i < _columnNames.Length; i++)
        {
            switch (e.Item.Cells[i].Text)
            {
                case "column1":
                case "column5":
                    // Interesting column, store index
                    _myColumns.Add(i);
                    break;
            }
        }
    }
    else if (e.Item.ItemType == ListItemType.Item ||
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        foreach (int i in _myColumns)
        {
            // Your original code:
            System.DateTime cellDate = default(System.DateTime);
            if (System.DateTime.TryParse(e.Item.Cells[i].Text, out cellDate))
            {
                e.Item.Cells[i].Text = string.Format("{0:d}", cellDate);
            }
        }
    }
}

如果您真的想存储所有列名,修改此代码将相当容易(或查看本文的早期版本)。

【讨论】:

  • 想评论否决票?这正是他所要求的?
  • 我没有投反对票,但我敢打赌你得到了它,因为他询问了 GridViews。您编辑了他的帖子以包含 DataGrid 的标签,并在上下文中进行了回答。
  • 但他正在使用DataGrid。 GridView 没有 ItemDataBound 事件,并且没有使用DataGridItemEventArgs。不要怪我细心:)
【解决方案2】:

如果您在 ItemDataBound 事件期间遍历各个单元格并且需要获取单元格的列名,那么您可以使用以下内容:

protected void myDataGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    int i = 0;
    string colName;

    foreach (TableCell cell in e.Item.Cells)
    {
        //string cellTxt = e.Item.Cells[i].Text;
        DataRowView dv = (DataRowView)e.Item.DataItem;
        colName = dv.DataView.Table.Columns[i].ColumnName;
        i++;
    }
}

【讨论】:

    【解决方案3】:

    首先您需要检查 e.Item 是否为ListItemType.ItemListItemType.AlternatingItemListItemType.Header。如果是Header,那么可以得到如下标题:

    protected void grvDetailedStatus_ItemDataBound(object sender, DataGridItemEventArgs e)
    { 
        if(e.Item.ItemType == ListItemType.Header))
        {
            // retrieve the header text... e.g.
            string FirstCellHeader = e.Item.Cells[0].Text;
        }
        else if((e.Item.ItemType == ListItemType.Item) || 
             (e.Item.ItemType == ListItemType.AlternatingItem))
        {
            // your code for items
        }
    }
    

    【讨论】:

    • 嗨,对不起,我已经更清楚地更新了问题。请帮忙。
    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 2021-01-17
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    相关资源
    最近更新 更多