gridview的datarowbound事件只對第一行有效


我想在點擊gridview進入編輯模式,在編輯行中根據lbSingInTime標簽是否有值來判斷cbSignIn是否該選擇,如有值則選中
但我測試后發現,第一行能達到預期效果,但第二行開始就不行了,明明lbSingInTime有值,但cbSignIn卻不能選中
 protected void grv1_RowDataBound(object sender, GridViewRowEventArgs e)
    {        if (e.Row.RowState == DataControlRowState.Edit)
            {


                CheckBox cbSignIn = (CheckBox)e.Row.FindControl("cbSignIn");

                Label lbSignIn = (Label)e.Row.FindControl("lbSingInTime");
                if (lbSignIn.Text.ToString().Trim() != "")
                {
                    cbSignIn.Checked = true;
                    cbSignIn.Enabled = false;

                }
                else
                {

                    cbSignIn.Checked = false;
                    cbSignIn.Enabled = true;

                }


        }
}
                        <EditItemTemplate>
                            <asp:CheckBox ID="cbSignIn" runat="server" /> 
                           <asp:Label ID="lbSingInTime" runat="server" Text='<%# Bind("SignInTime") %>'  ></asp:Label>              
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lbSingInTime" runat="server" Text='<%# Bind("SignInTime") %>'></asp:Label>
                        </ItemTemplate>


選擇第一行的效果,是正常的

選擇第二行后及以后的效果,

4 个解决方案

#1


在grideview控件的RowEditing事件中編寫代碼來控制它試試

#2


滿足 if (e.Row.RowState == DataControlRowState.Edit) 條件的能有幾行?

#3


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

#4


問題解決了,原來是有交替行的原因,只有偶數行才有效,奇數行就不起作用了
要用 if (e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit)||e.Row.RowState == DataControlRowState.Edit)來判斷

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com