3

我有 GridView(动态创建)和 BoundFields。我想更改 DataBound 事件的 BoundField 值。该值包含布尔值(True / False),我需要将它们更改为“Active”/“Inactive”。如果这不是动态 GridView,我会使用 TemplateField,但是,因为我正在动态创建 GridView,最简单的方法是在 BoundField 中进行。

但我不明白如何改变它。

这是我正确触发的 DataBound 事件:

protected void gr_RowDataBound(object sender, GridViewRowEventArgs  e)
    {
        DataRowView drv = (DataRowView)e.Row.DataItem;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (drv["IsRegistered"] != DBNull.Value)
            {
                bool val = Convert.ToBoolean(drv["IsRegistered"]);
                //???? HOW TO CHANGE PREVIOUS VALUE TO NEW VALUE (val) HERE?
            }
        } 
    }
4

2 回答 2

6

BoundFields例如,您不能使用在FindControlTemplateField 中查找控件来设置它的Text属性。相反,您设置Cell-Text

protected void gr_RowDataBound(object sender, GridViewRowEventArgs  e)
{
    DataRowView drv = (DataRowView)e.Row.DataItem;
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (drv["IsRegistered"] != DBNull.Value)
        {
            bool val = Convert.ToBoolean(drv["IsRegistered"]);
             // assuming that the field is in the third column
            e.Row.Cells[2].Text =  val ? "Active" : "Inactive";
        }
    } 
} 

除此之外,您TemplateFields甚至可以在动态GridView.

如何以编程方式添加 TemplateField

于 2012-10-05T14:28:00.720 回答
0

就我而言,我什至不知道包含 bool 值的列的名称或索引。因此,在第一次检查中,我检查单元格的值是“真”还是“假”,如果是,我记得它的索引。在此之后,我知道索引,如果没有,我什么都不做,如果我找到了,那么我会重放它的值。

这是我的工作代码:

// Cache of indexes of bool fields
private List<int> _boolFieldIndexes;

private void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //-- if I checked and there are no bool fields, do not do anything
    if ((_boolFieldIndexes == null) || _boolFieldIndexes.Any())
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //-- have I checked the indexes before?
            if (_boolFieldIndexes == null)
            {
                _boolFieldIndexes = new List<int>();
                for (int i = 0; i < e.Row.Cells.Count; i++)
                {
                    if ((e.Row.Cells[i].Text == "True") || (e.Row.Cells[i].Text == "False"))
                    {
                        // remember which column is a bool field
                        _boolFieldIndexes.Add(i);
                    }
                }
            }
            //-- go through the bool columns:
            foreach (int index in _boolFieldIndexes)
            {
                //-- replace its value:
                e.Row.Cells[index].Text = e.Row.Cells[index].Text
                    .Replace("True", "Ja")
                    .Replace("False", "Nein");
            }
        }
    }
}

好消息是,这适用于任何网格视图。只需附加事件。

于 2015-03-20T17:11:56.497 回答