GridView的RowDataBound问题
- HTML code
前台 <asp:GridView ID="gvwPurview" runat="server"AutoGenerateColumns="False"OnRowDataBound="gvwPurview_RowDataBound" OnRowDeleting="gvwPurview_RowDeleting"OnRowEditing="gvwPurview_RowEditing" DataKeyNames="iPvId" OnRowCancelingEdit="gvwPurview_RowCancelingEdit" OnRowUpdating="gvwPurview_RowUpdating"> <Columns> <asp:TemplateField HeaderText="上级权限"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "cPrtName").ToString().Trim() %> </ItemTemplate> <EditItemTemplate> <cc1:ParentPurviewDropDownList ID="dropEditParentPurview" runat="server"> </cc1:ParentPurviewDropDownList> </EditItemTemplate> </asp:TemplateField><asp:TemplateField HeaderText="类型"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "cPvType").ToString().Trim() %> </ItemTemplate> <EditItemTemplate> <cc1:PurviewTypeDropDownList ID="dropEditPurviewType" runat="server"> </cc1:PurviewTypeDropDownList> </EditItemTemplate> </asp:TemplateField><asp:CommandField UpdateText="更新" HeaderText="编辑" CancelText="取消" EditText="编辑" ShowEditButton="True" /> <asp:CommandField HeaderText="删除" DeleteText="<div id="de" onclick="JavaScript:return confirm('确定删除吗?')">删除</div> " ShowDeleteButton="True" /> </Columns> </asp:GridView>
- C# code
后台/// <summary> /// 绑定行时触发 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void gvwPurview_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if (e.Row.RowState == DataControlRowState.Edit) { //权限类型 PurviewTypeDropDownList dropEditPurviewType = (PurviewTypeDropDownList)e.Row.FindControl("dropEditPurviewType"); dropEditPurviewType.DataBind(); dropEditPurviewType.SelectedValue = DataBinder.Eval(e.Row.DataItem, "iPvType").ToString(); //上级权限 ParentPurviewDropDownList dropEditParentPurview = (ParentPurviewDropDownList)e.Row.FindControl("dropEditParentPurview"); dropEditParentPurview.PurviewID = this.txtPrtId.Text; dropEditParentPurview.FDAID = this.FDAID.ToString(); dropEditParentPurview.DataBind(); dropEditParentPurview.SelectedValue = DataBinder.Eval(e.Row.DataItem, "iPrtId").ToString(); } } }问题:当点编辑时,一行可以显示绑定DropDownList控件,另一行不行,不绑定DropDownList控件。即一行的e.Row.RowState是DataControlRowState.Edit而另一行确是DataControlRowState.Alternate,我想要每一行都是DataControlRowState.Edit,如何设置?
------解决方案--------------------------------------------------------
- C# code
if (e.Row.RowType == DataControlRowType.DataRow) { if ((e.Row.RowState & DataControlRowState.Edit) != 0) { } }
------解决方案--------------------------------------------------------
RowState即是Alternate又是Edit的状态判断语法:
1、最标准的写法
e.Row.RowState == (DataControlRowState.Alternate|DataControlRowState.Edit)
2、将RowState转换为整数
if (((int)e.Row.RowState)==5 )
{
// do something
}
注:DataControlRowState枚举:
Normal: 0
Alternate: 1
Selected: 2
Edit: 4
Insert: 8
如果偶数列既是Alternate,又是Edit,所以用((int)e.Row.RowState)==5表示偶数列处于编辑状态。
3、将RowState转换为字符串
if (e.Row.RowState==DataControlRowState.Edit || e.Row.RowState.ToString().Equals("Alternate, Edit"))
注:奇数列处于编辑状态,只需用
Row.RowState == DataControlRowState.Edit;
就可以了