禁用GridView AlternateRows

时间:2011-05-02 08:40:05

标签: c# .net asp.net gridview

我目前有一个包含多个文本值的GridView,单击“编辑”后会从中转换为DropDownLists。这需要我访问Cell的当前Textvalue并在单击Edit后相应地设置DropDown的SelectedIndex。这适用于......好吧,一半的行,因为只有那些有RowStyle“编辑”,其他人有“备用|编辑”,这是一个麻烦,因为我真的不需要这个功能。

这是我的代码:

protected void gridVariables_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //this only works at RowIndex 0, 2, 4 etc.
    if (e.Row.RowState == DataControlRowState.Edit)
    {
        switch (((DataRowView)e.Row.DataItem).Row.ItemArray[2].ToString())
        {
            case "True":
                ((CheckBox)e.Row.Cells[0].Controls[1]).Checked = true;
                break;
            case "False":
                ((CheckBox)e.Row.Cells[0].Controls[1]).Checked = false;
                break;
            default:
                break;
        }
        ((DropDownList)e.Row.Cells[3].Controls[1]).Items.FindByValue(((DataRowView)e.Row.DataItem).Row.ItemArray[3].ToString()).Selected = true;
    }
}

GridView包含TemplateFields,它在ItemTemplate中有标签,CheckBox(索引0)或DropDownList(索引3)为EditItemTemplate,其他为“普通”BoundFields。出于某种原因,我觉得无法在不完全破坏此帖子格式的情况下发布asp-markup。

那么,有没有办法改进我的编程结构,让它既可以使用“编辑”和“编辑|备用”行,也可以禁用交替行功能?

谢谢,

丹尼斯

1 个答案:

答案 0 :(得分:2)

DataControlRowState是基于标志的枚举,因此编写条件的正确方法是

if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)

注意按位& 运算符 - 它既适用于普通行也适用于备用行。