我目前有一个包含多个文本值的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。
那么,有没有办法改进我的编程结构,让它既可以使用“编辑”和“编辑|备用”行,也可以禁用交替行功能?
谢谢,
丹尼斯
答案 0 :(得分:2)
DataControlRowState是基于标志的枚举,因此编写条件的正确方法是
if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
注意按位& 运算符 - 它既适用于普通行也适用于备用行。