【问题标题】:looping through gridview does not always work循环通过gridview并不总是有效
【发布时间】:2014-02-18 00:23:05
【问题描述】:

不确定是什么原因导致我尝试了一些建议,但似乎都没有帮助。我已经调试了我的应用程序数十次,并且在调试所有步骤时都不会出现问题。但是当我发布我的应用程序并允许人们使用它时,问题就出现了,并不是每个人都随机决定不选中一个复选框并在前端也跳过整个过程我有一个至少需要验证在 button_click 触发之前选中一个复选框,所以我知道他们必须选中一个。

网格视图

 <div id="divEventDetail">
    <asp:GridView ID="grdEventDetail" runat="server" AutoGenerateColumns="False" DataKeyNames="EDID" Width="381px" OnRowDataBound="grdEventDetail_RowDataBound" GridLines="Horizontal">
    <Columns>
  <asp:TemplateField HeaderText="EventID" Visible="False">
           <ItemTemplate>
     <asp:Label ID="lblEventID" runat="server" Text='<%#     Eval("EDID") %>'></asp:Label>
           </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField HeaderText="Register" ItemStyle-CssClass="template-center">
           <ItemTemplate >                         
               <asp:CheckBox ID="chkRegister" runat="server"/>
           </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField HeaderText="Wait List" ItemStyle-CssClass="template-center">
           <ItemTemplate> 
               <asp:CheckBox ID="chkWaitList" runat="server" />   
           </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    </asp:GridView>
    </div>

代码隐藏

 protected void registerEvent()
        {
            foreach (GridViewRow row in grdEventDetail.Rows)
            {

                CheckBox chkR = row.FindControl("chkRegister") as CheckBox;
                CheckBox chkW = row.FindControl("chkWaitList") as CheckBox;

                if (chkR != null && chkW != null)// It is a datarow
                {

                    GridViewRow Rowr = ((GridViewRow)chkR.Parent.Parent);
                    GridViewRow Roww = ((GridViewRow)chkW.Parent.Parent);

                    if ((chkR.Checked) || (chkW.Checked))
                    // if ((((CheckBox)row.FindControl("chkRegister")).Checked == true) || (((CheckBox)row.FindControl("chkWaitList")).Checked == true))
                    {
                        Label eventID = row.FindControl("lblEventID") as Label;
***Then i do my database stuff here

【问题讨论】:

  • 我可以看看你的gridview图片吗?我想知道为什么代码引用多行RowrRoww
  • 您可能遇到了跨浏览器问题。我建议添加一些日志记录并询问您的客户正在使用哪个浏览器。
  • 最初我也有同样的想法,到目前为止我已经尝试过 firefox、IE6、IE8、IE9、IE10、IE11、Sarfari、GoogleChrome 似乎至少在所有这些中都有效。
  • 没有得到您正在讨论的问题。您是否介意添加更多关于您的用户体验的详细信息。
  • 我有一个网格视图,其中有一个模板字段,其中有一个复选框,我正在循环查找所有已选中的复选框,但由于某种原因,.CHECKED 甚至没有注册虽然选中了复选框,但这并不会一直发生,它是随机的,我无法查明原因

标签: c# asp.net gridview


【解决方案1】:

我相信grdEventDetail GridView 每行都没有CheckBoxes。例如,HeaderRowFooterRow 可能没有这些复选框。

我会重写代码以消除任何错误:

protected void registerEvent()
{
    foreach (GridViewRow row in grdEventDetail.Rows)
    {
        CheckBox chkR = row.FindControl("chkRegister") as CheckBox;
        CheckBox chkW = row.FindControl("chkWaitList") as CheckBox;

        if(chkR != null && chkW != null)// It is a datarow
        {
            GridViewRow Rowr = ((GridViewRow)chkR.Parent.Parent);
            GridViewRow Roww = ((GridViewRow)chkW.Parent.Parent);

            if ((chkR.Checked) || (chkW.Checked))  
            {
                //Your code goes here
            }
        }
    }
}

【讨论】:

  • 抱歉 afzalulh 这没有成功 我有 10 人注册,其中 2 人破产,8 人工作
  • 您的GridView 中的lblEventID 在哪里?我看不到!
  • 抱歉,我还有其他模板字段,我没有放上这些字段以免代码混乱,但它们是带有 eval 语句的基本标签
  • 如何填充 GridView?如果您在 Page_Load 中对其进行数据绑定,请确保您已将代码包装在 'if(!IsPostBack){}` 中。
  • 好的,经过数小时的调试,我越来越接近它看起来有时我的按钮单击决定调用我的下拉列表选择的索引更改事件,该事件正在重新绑定我的网格。现在我只需要弄清楚为什么在按钮上单击它有时会决定触发它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
相关资源
最近更新 更多