当前位置: 代码迷 >> ASP.NET >> GridView的RowDataBound有关问题
  详细解决方案

GridView的RowDataBound有关问题

热度:8747   发布时间:2013-02-25 00:00:00.0
GridView的RowDataBound问题
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="&lt;div id=&quot;de&quot; onclick=&quot;JavaScript:return confirm('确定删除吗?')&quot;&gt;删除&lt;/div&gt; "                      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;
就可以了