我的Gridview有一个类别列。 此列编辑模板具有DropDownList。 下拉列表数据源:
protected void grdProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowState == DataControlRowState.Edit && e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ds = (DropDownList)e.Row.FindControl("ddlCategory");
int ids = Convert.ToInt16(((Label)e.Row.FindControl("LID")).Text);
ds.DataTextField = "Name";
ds.DataValueField = "ID";
ds.DataSource = model.Categories.ToList();
ds.DataBind();
var idBynames = model.Products.Where(s => s.ID == ids).FirstOrDefault();
string names = idBynames.CategoryName;
var categorys = model.Categories.Where(s => s.Name == names).FirstOrDefault();
ds.SelectedValue = categorys.ID.ToString();
}
}
所以问题是奇数行索引下拉列表为空但偶数行索引工作正常。有什么问题?我无法看到它。
答案 0 :(得分:1)
您会注意到DataControlRowState
设置了FlagsAttribute
。如果您设置了AlternatingRowStyle,那么您的交替行将包含RowState
,其中包含标记DataControlRowState.Alternate
。
通过将DataControlRowState.Edit
语句更改为:
if
标志而不管其他任何标志
if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit && e.Row.RowType == DataControlRowType.DataRow)
添加按位运算符仅检查Edit
的标志值。